C语言的一段程序 求思路分析 急!!!!

[复制链接]
查看11 | 回复1 | 2011-5-1 01:59:35 | 显示全部楼层 |阅读模式
#includestdio.h
#defineMaxlen10000
#defineN200
main()
{
intnum[Maxlen];
intlen=1,i;
num[0]=1;
for(i=2;i=N;i)
len=mult(num,len,i);
for(i=len-1;i=0;i--)
printf(\"%d\",num);
printf(\"\\n\");
}

intmult(intnum[],intlen,intn)
{
inti,rem=0;
for(i=0;ilen;i)
{
rem=num*n;
num=rem;
rem=rem/10;
}
if(rem0)
{
num[len]=rem;
len;
rem=rem/10;
}
returnlen;
}


是求200的阶乘看不太懂求一步一步的思路分析
回复

使用道具 举报

千问 | 2011-5-1 01:59:35 | 显示全部楼层
#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为最低位。所以最后要倒序输出。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行