#include <bits/stdc++.h>
using namespace std;
long long a, b, c = 1, s = 1000000000, i;
int main() {
cin >> a >> b;
for (i = 1; i <= b; i++) c *= a;
if (c > s) cout << "-1";
else cout << c;
return 0;
}
只能得 70 分
这段代码明显是正确的,就分析一下:
用 c 存储 ab 的值,初始化为 1,用全局变量 i 当做循环变量,让 c 乘以 a 共 b 次,如果 c 大于 s (1000000000 是 109)则返回 -1 警示,否则返回 c 也就是 ab 的值。
问题出在:long long 表示不了所有数据,264 显然 long long 表示不了(long long 最大也就 263),所以即使 c 用 long long 存储也达不到 AC 。
以下测试点是 WA 的,它们最终的值应该是 long long 表示不了的:#8、#11、#19 ~ #21 。
首先先看题目的数据范围:
对于 60% 的数据,保证 ab≤1018。
所以如果分数低于 60 分那问题就出在代码中使用了 int 类型或者代码逻辑本身有错。
分数高于 60 分得怪题目吧测试数据的范围设置的过大(long long 最大可以表示大约 8.4×1019,所以分数 70 分不要奇怪)。