由于大数阶乘位数较大(比如1000!有2000多位!!!),所以需要依靠数组来实现。
思路:数组每一位均存储结果的一位数。为了实现这个目标,采用嵌套for循环。外层为阶乘次数(即所求阶乘),内层为每次的乘法运算,内层每一轮做乘法时均从个位开始依次与本轮的i相乘,然后均取结果的个位,再将更高位的结果保存为临时变量再返回给下一次循环,一轮循环结束后,再判断最高位是否还有进位,如果有,进行进位的赋值,以确保本轮循环的结果所对应的每个数组里的赋值均为1位数。
此外,为了实现内层的循环,需要一个本轮结果的位数作为判断循环结束的条件 ,在本轮结束判断进位时对位数进行自增赋值。
具体代码如下:
//大数阶乘
#include<stdio.h>
int main()
{
int a[10000]={1};//保存结果的数组 ,需要赋一个初值
int i,j,n;
int temp;//临时变量
int carry;//进位
int digit=1;//位数
scanf("%d",&n);
for(i=2;i<=n;++i)
{
for(j=1,carry=0;j<=digit;++j)
{
temp=a[j-1]*i+carry;
a[j-1]=temp%10;
carry=temp/10;
}
while(carry)//一次乘法结束后判断最大位是否为个位数
{
a[++digit-1]=carry%10;
carry/=10;
}
}
for(i=digit;i>=1;--i)
{
printf("%d",a[i-1]);
}
return 0;
}