目录
题目传送门
[CSP-J 2022] 乘方 - 洛谷https://www.luogu.com.cn/problem/P8813
70 分朴素算法
算法
首先,数学函数里是有一个 pow 的,可以计算几的几次方,详见常用的数学函数_-姬发-的博客-CSDN博客
所以直接用一下这个函数就可以了
代码
#include <iostream>
#include <math.h>
using namespace std;
long long a, b, s;
int main() {
cin >> a >> b;
s = pow(a, b);
if(s > 1e9)
cout << -1 << endl;
else
cout << s << endl;
return 0;
}
提交结果
然后呢,最终 70 分……
AC 进阶算法
算法
首先,先来分析一下上面的为什么会 WA
因为如果一个很大的数的很大的次方,那就会变成一个负数,一定小于 10^9
可以考虑一下循环 b 次,每次乘 a,然后每次判断是否小于等于 10^9,这样就会及时的判断出来越界
注意初值要设成 1
代码
#include <iostream>
using namespace std;
long long a, b, ans = 1;
int main()
{
scanf("%lld%lld", &a, &b);
if(a == 1)
{
puts("1");
return 0;
}
for(int i = 0; i < b; ++i)
{
ans *= a;
if(ans > 1000000000)
{
printf("-1\n");
return 0;
}
}
printf("%lld\n", ans);
return 0;
}
提交结果
提交一下哈
这样,我们就 AC 了!
尾声
如果这篇博客对您(您的团队)有帮助的话,就帮忙点个赞,加个关注!
最后,祝您(您的团队)在 OI 的路上一路顺风!!!
┬┴┬┴┤・ω・)ノ Bye~Bye~