result[2]=(i*result[2])%10=(5*2+2)%10=2,carry=1,此时,result[1]=0,result[2]=2 ,继续产生进位
result[3]=(i*result[3]%10)=5*0+1=1,carry=0,此时result[1]=0,result[2]=2,result[3]=1
那么倒序打印result数组,就是6!的值
代码
void BigFactorial(int targetNum)
{
static int a[50000]= {0,1}; //第一位不用
int carry = 0;//进位
int tmp = 0;//临时变量
int lenth=1;//已经保存的数组的长度
for(int i=2; i<=targetNum; i++) //外循环负责计算阶乘
{
carry=0;
for (int j=1; j<=lenth; j++) //内循环负责把阶乘的值保存到数组中
{
//乘法转化为加法和进位
tmp=a[j]*i+carry;
a[j]=tmp%10;
carry=tmp/10;
//如果有进位,则向前扩展一位
//内循环再计算一次
if (j==lenth&&carry!=0)
lenth++;
//如果没有产生进位,继续进行阶乘
}
}
for(int k=lenth; k>=1; k--)
printf("%d",a[k]);
}
int main()
{
BigFactorial(1000);
return 0;
}