注意四种情况
第一种:N<0
第二种:N0 || N1
第三种:N>0 && N<12
第四种:N > 12
第一种可能输出"Invalid input",第二种只需要给num[0]赋初值为1
第三种和第四种求法答案一样
void Print_Factorial ( const int N )
{ //caryy>0则该位数超越了9,有两位需要进位
//right是当前的位数 ans是记录乘积
int num[10000],carry=0,right=0,ans =1,i,k,j;
if(N<0) //第一种可能
printf("Invalid input");
else
{
num[0] = 1; //N==0 || N==1
for(i=2;i<=N;i++) //阶乘从2遍历到N
{
for(j=0;j<=right;j++) //位数,从0遍历到当前位数,i乘所有位数
{
ans = num[j]*i + carry;
num[j] = ans % 10;//实时化简,超过9的赋给下一位
carry = ans/10;//乘积超过当前位数,则carry>0
}
while(carry>0)
{
right++; //下一位数
num[right] = carry % 10; //赋值当前位
carry /=10; //如果carry还是大于0,则继续循环
}
}
for (k=right;k>=0;k--)
{
printf("%d",num[k]); //遍历答案
}
}
}