大数阶乘问题(c++课程设计)

上传人:子 文档编号:41644117 上传时间:2018-05-30 格式:DOC 页数:10 大小:252.50KB
返回 下载 相关 举报
大数阶乘问题(c++课程设计)_第1页
第1页 / 共10页
大数阶乘问题(c++课程设计)_第2页
第2页 / 共10页
大数阶乘问题(c++课程设计)_第3页
第3页 / 共10页
大数阶乘问题(c++课程设计)_第4页
第4页 / 共10页
大数阶乘问题(c++课程设计)_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《大数阶乘问题(c++课程设计)》由会员分享,可在线阅读,更多相关《大数阶乘问题(c++课程设计)(10页珍藏版)》请在金锄头文库上搜索。

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

2、乘问题就是本文研究的重点。本文详细讨论了如何采用数组的方法计算原题,从而避免数字越界问题。关键词:越界,数组,阶乘西安建筑科技大学课程设计(论文)- 4 -目录1.绪论 42.程序说明 42.1 问题描述 42.2 开发平台 42.3 变量命名规则43.程序设计 53.1 设计思路:53.2 设计难点及处理6西安建筑科技大学课程设计(论文)- 5 -4.结果及分析64.1 运行结果 64.2 结果分析74.3 需要完善的地方84.4 心得体会85.参考文献9 96.附录10西安建筑科技大学课程设计(论文)- 6 -1.绪论在数学计算的很多领域中都涉及数字的阶乘问题,因此,数字的阶乘问题是十分常

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

4、乘的数西安建筑科技大学课程设计(论文)- 7 -3.程序设计3.1 设计思路:用 numArr数组来存放阶乘的每一位数字,首先令数组的最后一位的数值为 1,位数为 1,然后将每次相乘的乘积存回数组,并循环处理每个数组中超过 10 的数,若数值超过 10,则需要进位,将位数加 1,原来的数除以 10,商数加前一位数的数值后存回前一位数的数组中,再将余数存回原来位数的数组中。例如,求 12!12! = 11!* 12 11! = 39916800 12! = 479001600西安建筑科技大学课程设计(论文)- 8 -3.2 设计难点及处理由于位数的限制,没有任何编程语言,可以存储例如 1000!

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

6、.参考文献 1 (美) Bjarne Stroustrup 著. C+程序设计语言(特别版). ( 裘宗燕 ).北京: 机械工业出版社,2002.1251882 何渝编 著.计算机常用数值算法与程序M.北京:人民邮电出版社,2003.731253郑丽 著.C+语言程序设计(第 4 版)M.北京:清华大学出版社,2010.1882484龚志祥 著.Visual C+编程实例与技巧集粹M.北京:兵器工业出版社,2004.2653125(美)Barbara Moo, Andrew Koening 著.C+沉思录.(梁实秋).北京:人民邮电出版社,2008.86137西安建筑科技大学课程设计(论文)-

7、 10 -6.附录核心源程序:#include #include void main() clrscr(); int numArr3000;/ Approximately , size of array depends on size of factorial. int total,rem=0,count;/rem use to save remainder of division(Carry Number). register int i; for(i=0;i0)total=numArri*count+rem;rem=0; if(total9)numArri=total%10;rem=total/10; elsenumArri=total;i-; rem=0; total=0;西安建筑科技大学课程设计(论文)- 11 -i=2999; for(i=0;i3000;i+) / Display arrays cell to show factorial 1000 if(numArri!=0 | count=1) coutnumArri;count=1; getch();

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号