繁体   English   中英

无法计算阶乘,在 C 中将 output 设为 0

[英]Unable to calculate factorial , getting output as 0 in C

尝试计算 65 的阶乘,得到正确的 output。 任何大于 65 的结果都会导致 output 为 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 位(谷歌它),所以你需要一个至少 303 位的long int才能正确计算。 世界上没有一台计算机的long int超过 300 位(让我们看看这个答案是如何老化的。)。

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

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

您可以参考this以获取更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM