#include <stdio.h>
int fact(int n)
{
int i;
for(i=1;i<n;i++)
n*=(n-i);
return n;
}
int main(void)
{
int num;
scanf("%d",&num);
printf("该数的阶乘为%d",fact(num));
return 0;
}
输入3 输出一个绝对值很大的负数
你的循环结束条件是 i >= n,然而你每次循环运算 n = n*(n-i),使得n越变越大
由于你的n是int型,因此当n超过int型上限(2^31 - 1)时,计算补码使得n变成负数,结束循环,此时你返回的n自然就是负数了,可以计算知道n = -921769440
下面给一个阶乘函数吧
// 建议使用DEVC++ 或 VS2017,别用1998年的VC6.0了,很多特性不支持嗯嗯明白了~没有注意循环条件...谢谢~