我对此代码的目标是在没有pow()的情况下进行指数运算。 它适用于evey值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;
}
为什么它会返回&#34; 0&#34;例如on&#34; 2 ^ 40%1000000007&#34;即使我使用%1000000007?
答案 0 :(得分:1)
首先,你不需要if语句for for循环。
第二,你试图在已经发生整数溢出后停止它。所以你需要在每次乘法运算后都这样做
第三次,您可以使用unsigned long long int
代替int
,因为int
取决于机器(对于您机器上的int,可能1000000007太大了)。
我想这应该有效:
#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;
}