C通过平方实现取幂

时间:2017-12-14 18:38:15

标签: c algorithm performance computation-theory

我尝试通过平方和#34;来实现"取幂。 C中的algorithmn但我的程序有一个奇怪的行为。首先,这是一个小代码片段:

long long fast_power_1(long long base, long long power){
    long long result = 1;
    while (power > 0)
    {
        if (power % 2 == 0)
        {
            power = power / 2;
            base = base * base;
        }
        else
        {
            power = power - 1;
            result = (result*base);
            power = power / 2;
            base = (base * base);
        }
    }
return result;}

如果我用以下方法调用该函数:

printf("%d\n",fast_power_1(2,100));

我希望输出类似于976371285,但结果是0,我不太明白为什么。

1 个答案:

答案 0 :(得分:4)

应使用long long格式说明符打印

%lld,否则应使用未定义的行为。此外,此方法已在power的较大值内溢出 - 因为很长时间无法保持2^100(截至目前在3264位系统中 - 当{ {1}}比特系统当然可以)。

截至目前,在您的代码中,如果您提供的指数值不是太大而使用128,那么它会为您提供有效的结果。

也许你想用它进行模运算。 (一般要求停在那里 - 就像模数一些大的素数,即printf("%lld",..))。