n的阶乘程序报告Word格式文档下载.docx
- 文档编号:18871093
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:9
- 大小:119.67KB
n的阶乘程序报告Word格式文档下载.docx
《n的阶乘程序报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《n的阶乘程序报告Word格式文档下载.docx(9页珍藏版)》请在冰豆网上搜索。
该程序是求一个大数n的阶乘(n!
),n的值范围从1~100之间变化。
输出结果从右往左每四个数之间用一个“,”隔开。
第二部分本人完成的主要工作
刚开始,我尝试着通过递归函数(如下)将100!
的结果算出
longfac(intn)//函数:
n的阶乘
{
longs;
if(n==0||n==1)
s=1;
else
s=n*fac(n-1);
returns;
}
结果发现无法得到正确结果(100的阶乘输出为0),询问后知道由于100的阶乘结果太大,用长字符串也会溢出导致无法显示,所以只能将阶乘后结果的个、十、百、千...位依次赋数给数组a[200]来解决这一问题。
数组a[200]的引入也让n阶乘结果的位数昭然若揭,又使用for循环使输出结果从右往左每四个数之间用一个“,”隔开。
最终设计出一个程序求一个大正整数数的阶乘(n!
),n的值范围从1~100之间变化(输出结果从右往左每四个数之间用一个“,”隔开)。
然后对程序进行编译,运行,并不断完善细节,不断优化。
1、解决结果的存放问题
由于是求一个大数n的阶乘,结果的很大(会溢出),无法直接输出或得到结果,所以在经过探索及请教同学之后拟定用乘法的基本原理把用户给的数据求得阶乘后的结果的个、十、百、千...位依次赋数给数组a[200]——即a[0]=个位上的数,a[1]=十位上的数.....以此类推。
2、结果位数的解决
根据数组a中的数据存放情况,从数组最后一位a[199]开始,往前依次进行观察,直至a[j]不为零,则证明结果的位数为j+1
3、“,”隔开
根据题目所要求的,输出结果从右往左每四个数之间用一个“,”隔开。
分析可知,这是将之前存放在数组a中的数进行规律性输出,最终拟定采用for循环解决。
又由于结果除以4的余数不同引起的输出规律有些许差异,最终决定分余数是否为0两种情况来输出最终结果。
4、意外处理
由于n的值是由操作者输入,需要考虑当输入值超出1~100范围时的程序应对方式(告知操作者:
输入数据错误)。
/******文件包涵部分******/
#include<
stdio.h>
stdlib.h>
/******定义变量部分******/
intn;
/***定义核心变量n***/
inti,j,k=0;
/***定义辅助变量***/
inta[200]={1},m;
/***定义并初始化数组a,其中m=结果的位数除以4的余数***/
/******获取用户输入的数据******/
printf("
pleaseinputanumber(1~100)n:
\n"
);
scanf("
%d"
&
n);
/******输入数据不合要求时的情况处理******/
if(n>
100||n<
1)
Sorry!
Youenterawrongnumber.\n"
for(i=1;
i<
=n;
i++)
{
for(j=0;
j<
200;
j++)
a[j]*=i;
}
a[j+1]+=a[j]/10;
a[j]%=10;
}
核心
上面的这一模块为核心模块,是用乘法的基本原理把用户给的数据求得阶乘后的结果的个、十、百、千...位依次赋数给数组a[200],即a[0]=个位上的数,a[1]=十位上的数.....
for(i=199;
i>
=0;
i--)
if(a[i]!
=0)
j=i;
break;
}/***求出n阶乘结果的位数减一(结果位数为j+1)***/
m=(j+1)%4;
/***算出结果的位数除以4的余数***/
printf("
thefactorialof%dis:
\n"
n);
【将n阶乘后结果的个、十、百、千...位依次赋数给数组a[200]】
点击“运行”后,根据提示(pleaseinputanumber(1~100)n:
)输入一个1~100中任一数(这一数值将赋予n),然后按回车键,即可得到所要求n阶乘的结果。
●当输入数为1~100之间时
输入8
输入100
●当输入数不合要求时
Ø
n核心变量,其值由用户输入(需在1~100之间)
a[200]用于存放n阶乘结果的个、十、百、千...位上的数
即a[0]=个位上的数,a[1]=十位上的数....
m结果的位数除以4以后的余数
i,j,k辅助变量,用于for循环等
intmain()
//定义核心变量n
//定义辅助变量
//定义变量并初始化数组a,其中m=结果的位数除以4的余数
//获取用户输入的数据
//输入数据不合要求时的处理
}//用乘法的基本原理把用户给的数据求得阶乘后的结果的个、十、百、千...位依次赋数给数组a即a[0]=个位上的数,a[1]=十位上的数.....
for(i=199;
}//求出阶乘后的数的位数减一(结果位数为j+1)
m=(j+1)%4;
//算出结果的位数除以4的余数
/*********按要求输出结果**********/
if(m!
for(i=j;
a[i]);
k++;
if(k==m)
}//输出余数不为零时第一个逗号前的数
for(i=j-m;
if((k-m)%4==0)
"
\n"
}//按要求输出余数不为零时剩下的数
if(k%4==0&
&
k!
=j+1)
}//输出余数为零时n阶乘的结果
system("
pause"
return0;
报告终于是完成了,而对于C语言,不知道再次相遇又是何时了,无论如何终究是告一段落了,感谢老师的指导,感谢同学的帮助,感谢书本的存在,我也算是获益良多,谢谢!
相信明天会更好,而我,依旧在学习的路上,行进。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 阶乘 程序 报告