ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:119.67KB ,
资源ID:5883207      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5883207.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(n的阶乘程序报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

n的阶乘程序报告.docx

1、n的阶乘程序报告HUNAN UNIVERSITY程序设计训练报告题目 求n! 学生姓名学生学号专业班级学院名称指导老师2013 年 7 月 11 日第一部分 程序功能简介该程序是求一个大数n的阶乘(n!),n的值范围从1100之间变化。 输出结果从右往左每四个数之间用一个“ ,”隔开。第二部分 本人完成的主要工作 刚开始,我尝试着通过递归函数(如下)将100!的结果算出long fac(int n)/ 函数:n的阶乘 long s; if(n=0|n=1) s=1; else s=n*fac(n-1); return s; 结果发现无法得到正确结果(100的阶乘输出为0),询问后知道由于100

2、的阶乘结果太大,用长字符串也会溢出导致无法显示,所以只能将阶乘后结果的个、十、百、千.位依次赋数给数组a200来解决这一问题。 数组a200的引入也让n阶乘结果的位数昭然若揭,又使用for循环使输出结果从右往左每四个数之间用一个“ ,”隔开。 最终设计出一个程序求一个大正整数数的阶乘(n!),n的值范围从1100之间变化(输出结果从右往左每四个数之间用一个“ ,”隔开)。然后对程序进行编译,运行,并不断完善细节,不断优化。 1、解决结果的存放问题 由于是求一个大数n的阶乘,结果的很大(会溢出),无法直接输出或得到结果,所以在经过探索及请教同学之后拟定用乘法的基本原理把用户给的数据求得阶乘后的结

3、果的个、十、百、千.位依次赋数给数组a200 即a0 =个位上的数,a1 =十位上的数 .以此类推。2、结果位数的解决 根据数组a中的数据存放情况,从数组最后一位a199开始,往前依次进行观察,直至aj不为零,则证明结果的位数为j+1 3、“ ,”隔开 根据题目所要求的,输出结果从右往左每四个数之间用一个“ ,”隔开。分析可知,这是将之前存放在数组a中的数进行规律性输出,最终拟定采用for循环解决。又由于结果除以4的余数不同引起的输出规律有些许差异,最终决定分余数是否为0两种情况来输出最终结果。4、意外处理 由于n的值是由操作者输入,需要考虑当输入值超出1100范围时的程序应对方式(告知操作者

4、:输入数据错误)。/* 文件包涵部分 */#include #include /* 定义变量部分 */ int n;/*定义核心变量n */ int i,j,k=0;/*定义辅助变量*/ int a200=1,m;/*定义并初始化数组a , 其中m=结果的位数除以4的余数*/ /* 获取用户输入的数据 */ printf(please input a number (1100)n: n ); scanf(%d,&n); /* 输入数据不合要求时的情况处理 */ if(n100|n1) printf(Sorry!You enter a wrong number. n); for(i=1;i=n;

5、i+) for(j=0;j200;j+) aj*=i; for(j=0;j=0;i-) if(ai!=0) j=i; break; /*求出n阶乘结果的位数减一 (结果位数为j+1)*/m=(j+1)%4;/*算出结果的位数除以4的余数*/printf(the factorial of %d is:n ,n); for(i=1;i=n;i+) for(j=0;j200;j+) aj*=i; for(j=0;j200;j+) aj+1+=aj/10; aj%=10; 【将n阶乘后结果的个、十、百、千.位依次赋数给数组a200】 点击“运行”后,根据提示(please input a number

6、 (1100)n: )输入一个1100中任一数(这一数值将赋予n),然后按回车键,即可得到所要求n阶乘的结果。 当输入数为1100之间时 输入8 输入100 当输入数不合要求时 n 核心变量,其值由用户输入(需在1100之间) a200 用于存放n阶乘结果的个、十、百、千.位上的数 即a0 =个位上的数,a1 =十位上的数 . m 结果的位数除以4以后的余数 i,j,k 辅助变量,用于for循环等 #include #include int main() int n;/定义核心变量n int i,j,k=0;/定义辅助变量 int a200=1,m;/定义变量并初始化数组a,其中m=结果的位数

7、除以4的余数 printf(please input a number (1100)n: n ); scanf(%d,&n);/获取用户输入的数据 if(n100|n1) printf(Sorry!You enter a wrong number. n);/输入数据不合要求时的处理 else for(i=1;i=n;i+) for(j=0;j200;j+) aj*=i; for(j=0;j=0;i-) if(ai!=0) j=i; break; /求出阶乘后的数的位数减一 (结果位数为j+1) m=(j+1)%4;/算出结果的位数除以4的余数 printf(the factorial of %

8、d is:n ,n); /* 按要求输出结果 */ if(m!=0) for(i=j;i=0;i-) printf(%d,ai); k+; if(k=m) break; /输出余数不为零时第一个逗号前的数 for(i=j-m;i=0;i-) if(k-m)%4=0) printf(,); printf(%d,ai); k+; printf(n); /按要求输出余数不为零时剩下的数 else for(i=j;i=0;i-) printf(%d,ai); k+; if(k%4=0&k!=j+1) printf(,); printf(n); /输出余数为零时n阶乘的结果 system (pause); return 0;报告终于是完成了,而对于C语言,不知道再次相遇又是何时了,无论如何终究是告一段落了,感谢老师的指导,感谢同学的帮助,感谢书本的存在,我也算是获益良多,谢谢!相信明天会更好,而我,依旧在学习的路上,行进。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1