我的13阶乘输出不正确,该如何解决?

时间:2019-06-18 05:44:23

标签: c

我的输出 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

2 个答案:

答案 0 :(得分:2)

期望值超过32位,您得到的是将实际结果调整为32位:

1932053504 equals (6227020800 & 0xFFFFFFFF)

您必须验证环境中intlong int的容量,例如与print-他们的sizeof

答案 1 :(得分:0)

您应该使用long long int对64位进行计算。如果您也打破了这一障碍,则需要做更复杂的事情。

注意:使用long两次,如果编译器支持64位体系结构,这不是一个错误。

如果您对负数不感兴趣,可以使用unsigned long long int来增加一些“舒适感”。