gpt4 book ai didi

c - 即使我使用 % 1000000007 它仍然结果为 0

转载 作者:行者123 更新时间:2023-11-30 14:49:31 24 4
gpt4 key购买 nike

我对这段代码的目标是在没有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com