我刚刚开始学习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
答案 0 :(得分:3)
您可能会在平台上溢出LONG_MAX值,导致未定义的行为。您可以使用 unsigned long (或 unsigned long long ),但它们也不会持续更长时间。
您的选择仅限于此。您可以使用支持任意大整数的GNU GMP等库。否则,您必须自己实施,类似于GMP。
另一方面,
else if (dig=1)
不是你想要的。它应该是
else if ( dig == 1 )
或者您可以在此处使用else {...}
,除非您打算检查否定数字。