我尝试通过平方和#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,我不太明白为什么。
答案 0 :(得分:4)
long long
格式说明符打印 %lld
,否则应使用未定义的行为。此外,此方法已在power
的较大值内溢出 - 因为很长时间无法保持2^100
(截至目前在32
或64
位系统中 - 当{ {1}}比特系统当然可以)。
截至目前,在您的代码中,如果您提供的指数值不是太大而使用128
,那么它会为您提供有效的结果。
也许你想用它进行模运算。 (一般要求停在那里 - 就像模数一些大的素数,即printf("%lld",..)
)。