作为 C 初学者,我制作了自己的 pow 函数。 函数中的参数类型和返回值都是long long int。 这是代码:
typedef long long int lli;
lli p0wer(lli base, lli exp){
lli p = 1;
for(int i = 1; i <= exp; i++){
p = p*base; //we multiply exp times the base
}
return p;
}
问题是对于大指数,它返回0。 (对于较小的值,例如 10^10,它会正确返回结果) 我该如何解决这个问题?
关于您的代码有两件事需要提及:
您正在将
i
(即 int
)与 exp
(即 long long int
)进行比较。就像@user30482提到的,如果指数大于2147483647(这是整数的最大值),你将有一个无限循环,因为这个整数将从1到(2**31 - 1),然后到又是1。
如果将结果打印为
printf("%d\n", p0wer(2, 62));
,则最终结果总是 0,因为该值将大于整数。您应该有 lld
说明符,如 @pmg 提到的。
这是您的函数的有效代码:
#include <stdio.h>
typedef long long int lli;
lli p0wer(lli base, lli exp){
lli p = 1;
for(long long int i = 1; i <= exp; i++){
p = p*base; //we multiply exp times the base
}
return p;
}
void main(void){
printf("%lld\n", p0wer(2, 62));
}
您可以测试比较
int
与 long long int
将如何导致无限循环:
#include <stdio.h>
typedef long long int lli;
lli p0wer(lli base, lli exp){
lli p = 1;
for(int i = 1; i <= exp; i*=2){
p = p*base; //we multiply exp times the base
}
return p;
}
void main(void){
printf("%lld\n", p0wer(1, 99999999999));
}
这将永远运行。