大数阶乘问题C课程设计绝无仅有_第1页
大数阶乘问题C课程设计绝无仅有_第2页
大数阶乘问题C课程设计绝无仅有_第3页
大数阶乘问题C课程设计绝无仅有_第4页
大数阶乘问题C课程设计绝无仅有_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计(论文)课程名称: 题 目: 求解1000的阶乘 院 (系): 理学院 专业班级: 应数0801 姓 名: 学 号: 081030107 指导教师: 2011年 1 月 14 日摘要计算数字的阶乘问题,是比较常见,而且比较重要的一种函数。其中计算一般较小的数字时,采用迭代法,这种方法简洁、方便。但是,在运算一些较大的数字的阶乘时,例如计算1000的阶乘,由于没有任何一个编程语言有一种变量或机制来储存1000!这么大的数,所以就会产生数字越界问题,也叫上溢。因此,如何计算大数的阶乘问题就是本文研究的重点。本文详细讨论了如何采用数组的方法计算原题,从而避免数字越界问题。关键词:越界,数组,

2、阶乘目录1.绪论············································· 42.程序说明··&#

3、183;······································ 42.1问题描述 ·········

4、3;·····························42.2开发平台 ···················&

5、#183;···················42.3变量命名规则····························

6、83;·······43.程序设计 ········································ 53.1设计

7、思路:·······································53.2设计难点及处理········

8、3;·························64.结果及分析·······················&#

9、183;················64.1运行结果 ································

10、;·······64.2结果分析········································74.3需要完善的

11、地方··································84.4心得体会··············&#

12、183;·························85.参考文献·······················9

13、6.附录·············································101.绪论在数学计算的很多领域中都涉及数字的阶乘问

14、题,因此,数字的阶乘问题是十分常见且重要的一种函数。一般情况下,计算较小的数字的阶乘时,采用递归调用算法。这个是最容易想的,如果是1的阶乘,则返回1,其他的都返回n-1的阶乘与n的积,循环调用即可。不过问题是即使用double来存放该值,由于double本身的精度、能存的数字大小所限,算不了太大的数的阶乘。因此,计算较大数字的阶乘时,一种简洁高效的算法的开发就显得十分紧迫和重要了。2.程序说明2.1问题描述:求解1000的阶乘2.2开发平台:Microsoft Visual C+ 6.02.3变量命名规则numArr 数组total 数组元素的值rem 余数i 数组元素编号count 数组元素

15、需乘的数3.程序设计3.1设计思路:用numArr数组来存放阶乘的每一位数字,首先令数组的最后一位的数值为1,位数为1,然后将每次相乘的乘积存回数组,并循环处理每个数组中超过10的数,若数值超过10,则需要进位,将位数加1,原来的数除以10,商数加前一位数的数值后存回前一位数的数组中,再将余数存回原来位数的数组中。例如,求12!12! = 11!* 12 11! = 39916800 12! = 4790016003.2设计难点及处理由于位数的限制,没有任何编程语言,可以存储例如1000!这个乘法结果的量。解决的方法是采用数组来存储。4.结果及分析4.1运行结果4.2结果分析通过使用数组的方法

16、,可以有效避免数字越界问题,存储较大数字的阶乘,得到准确的计算结果。4.3需要完善的地方程序的编写有待进一步的精简,本程序可以解决1000的阶乘问题,但对于特别巨大的数字的阶乘问题还是无法解决。并且不能用迭代法计算较小数的阶乘。可在此基础上编写万能阶乘计算程序。4.4心得体会通过这次的课程设计,我查阅了很多资料,并和同学们一起讨论,使我学会了独立自学,以及如何互相讨论学习,增强了我对于C+语言的掌握,和编写程序的能力。使我受益匪浅。5.参考文献          1 (美) Bjarne Str

17、oustrup 著. C+程序设计语言(特别版). ( 裘宗燕 ).北京: 机械工业出版社,2002.1251882 何渝编 著.计算机常用数值算法与程序M.北京:人民邮电出版社,2003.731253郑丽 著.C+语言程序设计(第4版)M.北京:清华大学出版社,2010.1882484龚志祥 著.Visual C+编程实例与技巧集粹M.北京:兵器工业出版社,2004.2653125(美)Barbara Moo, Andrew Koening 著.C+沉思录.(梁实秋).北京:人民邮电出版社,2008.861376.附录核心源程序:#include<iostream.h>#incl

18、ude<conio.h>void main()clrscr();int numArr3000;/ Approximately , size of array depends on size of total,rem=0,count;/rem use to save remainder of division(Carry Number).register int i;for(i=0;i<3000;i+)numArri=0;/set all array on NULL.i=2999;/start from end of array.numArr2999=1;for(count=2;count<=1000;count+)/Refer to my article for m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论