无法计算阶乘,在 C 中输出为 0

Unable to calculate factorial , getting output as 0 in C

尝试计算 65 的阶乘,得到正确的输出。任何大于 65 的值都会导致输出 0。令人震惊,因为我使用的是 unsigned long int。有什么问题吗?

代码:

#include <stdio.h>

void factorial(int unsigned long);
int main()
{
    int unsigned long num, result;
    printf("\nEnter number to obtain factorial : ");
    scanf("%ld", &num);
    factorial(num);
}
void factorial (int unsigned long x)
{
    register int unsigned long f = 1;
    register int unsigned long i;
    for (i=x;i>=1;i--)
        f= f*i;
    printf("\nFactorial of %lu = %lu\n",x,f);
}

你肯定没有得到 65 的正确结果! log2(65!) 刚刚超过 302 位(Google),因此您需要至少 303 位的 long int 才能正确计算。世界上没有 long int 超过 300 位的计算机(让我们看看这个答案是如何老化的!)。

您可以计算的 64 位最大阶乘是 20! (大约是 2.4e18)。

加上@JohnZwinck,unsigned long long (ULLONG_MAX) 类型变量的最大值为 18446744073709551615。所以所有值都大于 20!将有一个垃圾值

您可以参考this了解更多信息。