无法计算阶乘,在 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了解更多信息。
尝试计算 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了解更多信息。