我的输出 13!= 1932053504
预期输出 13!= 6227020800
我尝试使用int,long int,但输出仍然保持不变
long int fact(long int num);
int main(){
long int n;
printf("Enter a number to find factorial: ");
scanf("%ld",&n);
printf("%ld!= %ld",n,fact(n));
}
long int fact(long int n){
if(n>=1)
return n*fact(n-1);
else
return 1;
}
输出: 13!= 1932053504
答案 0 :(得分:2)
期望值超过32位,您得到的是将实际结果调整为32位:
1932053504 equals (6227020800 & 0xFFFFFFFF)
您必须验证环境中int
和long int
的容量,例如与print
-他们的sizeof
。
答案 1 :(得分:0)
您应该使用long long int
对64位进行计算。如果您也打破了这一障碍,则需要做更复杂的事情。
注意:使用long
两次,如果编译器支持64位体系结构,这不是一个错误。
如果您对负数不感兴趣,可以使用unsigned long long int
来增加一些“舒适感”。