This question already has answers here:
Need help in mod 1000000007 questions
                                
                                    (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