我对这段代码的目标是在没有 pow() 的情况下进行指数运算。 它适用于每个值 a^b 其中 b <= 30。我知道我应该使用 x % 1000000007 来防止整数溢出。
#include <stdio.h>
int main(void) {
int i, a, b, rst;
rst = 1;
scanf("%d %d", &a, &b);
for (i = 0; i < b; i++){
rst = rst * a;
if( b == 0){
rst = 1;
}
}
printf("%d\n", rst % 1000000007);
return 0;
}
为什么它会返回“0”,例如“2^40 % 1000000007”,即使我使用的是 % 1000000007?
最佳答案
首先,for循环中不需要if语句。
第二,您试图在整数溢出发生后阻止它。因此,您需要在每次乘法运算后执行此操作。
第三,可以使用unsigned long long int
代替int
,因为int
是机器相关的(可能是1000000007对于您机器上的 int 来说太大了)。
我想这应该可行:
#include <stdio.h>
int main()
{
unsigned long long int i, a, b, rst;
scanf("%llu %llu", &a, &b);
rst = 1;
for (i = 0; i < b; i++){
rst = (rst * a) % 1000000007;
}
printf("%llu\n", rst);
return 0;
}
关于c - 即使我使用 % 1000000007 它仍然结果为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49545506/