洛谷:p8813
OJ:P4974
数据范围:
b=1 10分,
b<=2 30分 a*a
b<=30, ab= <1018 结果超整数范围了。但在long long范围内 263
1=<a,b=<109 a=2, b=30时候230就大于109
代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | /**************************************************************** * Description: 2022年普及组复赛 乘方 * Author: Alex Li * Date: 2023-09-18 10:42:27 * LastEditTime: 2024-09-21 19:48:38 ****************************************************************/ #include <iostream> using namespace std; int a, b; int main() { cin >> a >> b; // 初始化结果为 1,因为任何数的 0 次幂都是 1 long long ans = 1; // 如果 a 是 1,无论 b 的值是多少,结果始终为 1 if (a == 1) { cout << 1 << endl; return 0; } // 逐次累乘 a,直到 b 变为 0 或者结果超过 10^9 while (b > 0 && ans <= 1e9) { ans *= a; // 每次将结果乘以 a b--; // 减少 b 的值,直到 b 次乘法完成 } // 如果累乘结果超过了 10^9,输出 -1 表示超出范围 if (ans > 1e9) { cout << -1 << endl; return 0; } // 否则输出正确的乘积结果 cout << ans << endl; return 0; } |
直接用pow函数不行,报表,只得70分。
1 2 3 4 5 6 7 8 9 10 11 | #include <iostream> using namespace std; int main(){ int a,b,c; cin>>a>>b; long long ans=1;//ans要大 c=1000000000; ans=pow(a,b); cout<<ans; } |