我刚刚开始学习C编程,并认为我将从计算一个数的阶乘这一非常基本的问题开始。我的代码输出正确的值,直到阶乘为13,然后在输入>13时给出错误的答案。我的代码是:
#include<stdio.h>
long int factorial(int);
int main()
{
int num;
long int fact;
printf("Please type the number you want factoralized: ");
scanf("%d",&num);
fact = factorial(num);
printf("%d",fact);
return 0;
}
long int factorial(int dig)
{
long int facto;
if (dig>1)
facto = dig * factorial(dig-1);
else if (dig=1)
facto = 1;
return facto;
}
当我输入13时,它返回1932053504,而不是预期的6227020800
您的平台上可能溢出了LONG_MAX值,从而导致未定义的行为。您可以使用unsigned long(或signed long long),但它们也不会持续太久。
您的选择在此受到限制。您可以使用支持任意大整数的库,例如GNUGMP。否则,你将不得不像GMP一样自己实施。
另一方面,
else if (dig=1)
不是你想要的。应该是
else if ( dig == 1 )
或者您可以在这里简单地使用else {...}
,除非您打算检查负数。