This question already has answers here:
Need help in mod 1000000007 questions
(3个答案)
去年关闭。
我对此代码的目标是在不使用pow()的情况下进行指数运算。
它适用于evey值a ^ b,其中b
为什么即使我使用%1000000007,它也会在“ 2 ^ 40%1000000007”上返回“ 0”?
(3个答案)
去年关闭。
我对此代码的目标是在不使用pow()的情况下进行指数运算。
它适用于evey值a ^ b,其中b
#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;
}
为什么即使我使用%1000000007,它也会在“ 2 ^ 40%1000000007”上返回“ 0”?
最佳答案
首先,在for循环中不需要if语句。
其次,您要尝试在整数溢出发生后停止它。因此,您需要在每次乘法运算之后执行此操作。
第三,您可以使用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;
}
10-07 21:45