[英]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.