共计 729 个字符,预计需要花费 2 分钟才能阅读完成。
题目
小文同学刚刚接触了信息学竞赛,有一天她遇到了这样一个题:给定正整数 a 和 b,求 a^b 的值是多少。
a^b 即 b 个 a 相乘的值,例如 2^3 即为 3 个 2 相乘,结果为 2\times2\times2=8。
“简单!”小文心想,同时很快就写出了一份程序,可是测试时却出现了错误。
小文很快意识到,她的程序里的变量都是 int
类型的。在大多数机器上,int
类型能表示的最大数为 2^{31}−1,因此只要计算结果超过这个数,她的程序就会出现错误。
由于小文刚刚学会编程,她担心使用 int
计算会出现问题。因此她希望你在 a^b 的值超过 10^9 时,输出一个 -1
进行警示,否则就输出正确的 a^b 的值。
然而小文还是不知道怎么实现这份程序,因此她想请你帮忙。
输入描述
输入共一行,两个正整数 a, b。
输出描述
输出共一行,如果 a^b 的值不超过 10^9,则输出 a^b 的值,否则输出 -1
。
样例 1
输入
10 9
输出
1000000000
样例 2
输入
23333 66666
输出
-1
数据范围
对于 10\% 的数据,保证 b=1
对于 30\% 的数据,保证 b\leq2
对于 60\% 的数据,保证 b\leq30, a^b\leq10^{18}
对于 100\% 的数据,保证 1\leq a,b\leq10^9
答案
#include<cstdio>
#include<cmath>
int main(){
unsigned int a,b;
scanf("%d %d", &a, &b);
double s = pow(a,b);
printf("%d", (s>1000000000?-1:(int)(s)));
return 0;
}
解析
用 pow 神奇的 AC 了……正常请手搓快速幂!
正文完