#includestdio.h
#defineMaxlen10000//宏定义数组长度
#defineN200//所求的阶乘数,此题中为200
main()
{
intnum[Maxlen];//定义int型长度为Maxlen的数组
intlen=1,i;//初始化len
num[0]=1;//初始化数组第一个元素
for(i=2;i=N;i)//从2到200开始循环
len=mult(num,len,i);//调用函数mult,并为len赋值
for(i=len-1;i=0;i--)//初始化i,循环
printf(\"%d\",num);//输出每个数
printf(\"\\n\");
}
intmult(intnum[],intlen,intn)//函数mult
{
inti,rem=0;//定义变量
for(i=0;ilen;i)//循环体内的意思是求数组中第i个元素*n的和然后求和个位上的数再将个位的数字赋给数组的下一个元素
{
rem=num*n;
num=rem;
rem=rem/10;
}
if(rem0)//若求的和这个数大于0,则将这个数字的个位数加入数组,并使len自加
{
num[len]=rem;
len;
rem=rem/10;
}
returnlen;
}
这个程序整体的意思就是首先num数组是用来存储阶乘得到的结果的,由于是200的阶乘,所以必须用一个数组才能存储的下,其次,阶乘表示为n!=n*(n-1)*(n-2).....3*2*1,那么我们首先将num数组中的最低位置为1,然后依次用2到n的数去乘num中的数,每次计算的结果也保存在num中。最后得到的结果就是阶乘的结果,0为最低位。所以最后要倒序输出。 |