高精度计算n阶乘的c语言源代码和解释

上传人:公**** 文档编号:563867526 上传时间:2024-01-04 格式:DOCX 页数:8 大小:23.35KB
返回 下载 相关 举报
高精度计算n阶乘的c语言源代码和解释_第1页
第1页 / 共8页
高精度计算n阶乘的c语言源代码和解释_第2页
第2页 / 共8页
高精度计算n阶乘的c语言源代码和解释_第3页
第3页 / 共8页
高精度计算n阶乘的c语言源代码和解释_第4页
第4页 / 共8页
高精度计算n阶乘的c语言源代码和解释_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《高精度计算n阶乘的c语言源代码和解释》由会员分享,可在线阅读,更多相关《高精度计算n阶乘的c语言源代码和解释(8页珍藏版)》请在金锄头文库上搜索。

1、高精度计算大数阶乘的C语言源代码和解释关键词:高精度,大数,阶乘,C,输入的容错处理,内容介绍:利用高精度计算n阶乘的c语言源代码及其解释,其中还包括一些在C语言中常用 的简单编程习惯和技巧,非常适合C语言初学者借鉴,如果好好的把程序调试-遍会对初学者很大的 启发。程序中没有用到指针,结构体,共用体等内容,但运用了预编译,头文件,数组等等知识,特 别是对getchar()进行输入容错的运用,并有详细的解释!算法简介:高精度计算n的阶乘其实是高精度大整数乘法的应用,其核心思想就是把计算结果每 一位上的数字保存到一个数组成员中,例如:把567保存至数组中,保存结果应该是resultO =7; re

2、sultl =6: result2 =5。把整个数组看成一个数字,这个数字和一个数相乘的时候,需要每 一位都和这个乘数进行相乘运算还需要把前一位的进位加上。算法如下:int结果=resultx *乘 数+进位;每一位的计算结果有了,把这个结果的个位数拿出来放到这个数组元素上:resultx= 结果10;接下来的工作就是计算出进位:进位=结果/ 10;这样一位一位的把整个数组计算一遍, 最后可能还有进位,用同样的方法,把进位的数值拆成单个数字,成到相应的数组元素中。最后从后 往前输出结果。getchar()使用说明:getchar()有一个int型的返回值.当程序调用getchar()时.程序就

3、等着用 户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当 用户键入回车之后,getchar()才开始从stdio流中每次读入一个字符.getchar()函数的返回值是用 户输入的第一个字符的ASCII码,如出错返回且将用户输入的字符回显到屏幕.如用户在按回车之 前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar()调用读取.也就是说,后 续的getchar()调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后, 才等待用户按键.getch ()与getchar()基本功能相同,差别是getch ()直接

4、从键盘获取键值,不等待用户按回 车,只要用户按一个键,getch ()就立刻返回,getch ()返回值是用户输入的ASCII码,出错返回-l. 输入的字符不会回显在屏幕上.getch ()函数常用于程序调试中,在调试时,在关键位置显示有关的结 果以待查看,然后用getch ()函数暂停程序运行,当按任意键后程序继续运行.下面是用高精度计算n阶乘的c语言源代码:(还附有正整数输入的容错处理函数)程 序特点:程序使用了数组的方法,虽然效率不高,但适合初学者学习。程序在VC+6.0, VC+2010测试通过。程序1使用了一个人数组,程序2使用了4个数组组合在一起,其实程序 2完全是锻炼初学者的程序

5、分析能力而已。由于系统限制,程序1中当把HEAD_M设为 250000 (不能超过该数)时,可以计算不要人于50000的阶乘。程序2不能HEAD_M不能超 过70000,由此可知其实用多数组是无意义的!程序1:本程序适合学习c语言的初学者调试学习,程序中没有用到指针,结构体,共用体等内容 本来下面的代码是一个头文件,文件名是:headself.h里面只有一个输入正整数的函数。 把自己经常用的一些变量,函数等等放入自编的头文件是一个很好的习惯。/*begin 何含寸*/# include #include #in elude#in elude /*end包含头文件厂begin宏定义#define

6、 DEBUG 1当程序在调试阶段时DEBUG为匕发布时改成0则可#define HEAD_M 250000 存储阶乘运算结呆的数组长度,该参数不要超过250000#define HEAD_N 5 限制输入的正整数位数,该参数不要超过5,如果是5,对应的HEAD.M要设为250000为且输入的求阶乘的数也不能人于50000*/厂end宏定义 厂begin函数声明int lnput_uint(); /无符号整形输入函数/*end pK|*/*begin自定义类型* 穴*/*end自定义类型厂begin全局变量定义*穴*/*/*end 全局变帛定义穴*3*3*3*3*/*begin函数定义 int

7、lnput_uint() 无符号整形输入函数int count_a=0,ratio=l/count-c=0,number=Ozjudge=l;/count_a计数变量;ratio转换系数,1, 10, 100等; /count_c计数变量:number函数返回值;/ judge输入判断变量,H出错;char strHEAD_N;for (count_a=0;count_a=0;count-a-/count_c-)strcount_a=getchar();if(!(strcount_a=,0, & strcount_a=,01& count_a0)for(count_a=count-c+l;co

8、unt_a=,0, & strcount_a=,9,)n umber+=(strcount_a-0,)*ratio;ratio*=10;elsebreak;while(judge0); return number;厂end函数定义 卜面的代码是计算n的阶乘的高精度算法,是个有趣的程序,初学者好好调试一下会学会 不少的知识/include headself.h11 如果把前面的代码写成头文件则不要屏蔽该行代码void main()intaHEAD_MJ/n/nl=l/j/jl/flag=l;for(i=0;i50000)n=50000;#if (DEBUG=1)printf(n你输入的数是:d,

9、n);#elseprintf(n卜面将计算0到d的阶乘表!谢谢n,n);printf(nO!=l);讦(n0)printf(,nl!=l);#endifa0 = 1;for(j = 2; j = n; j+)for(i = 0; i flag; i+) ai *= j;for(i = 0; i = 10)ai+l += ai/10;ai = ai%10;if(i = flag-1) flag+;#if (DEBUG=0)printf(”n%d!=,j);for(jl = flag-1; jl = 0; jl-)printf(”d: ajl); /printf(%d!的结果是d 位fjjlag)

10、;#endif#if (DEBUG=1)printf(,n%d!=,-j);for(jl = flag-1; jl = 0; jl-)printf(”d”, ajl);#endifif (n6900)printf(”n您输入的数也太大了吧,终于显示结束,您知道吗? d!的结果是:1位, 屏幕可能己显示不全了! ,n,flag);else if(n1000)printf(n您输入的数也太人了吧,终于显示结束,您知道吗? d!的结果是01位, 累不累啊你! ”,n,flag);elseprintf(n您知道吗? %出的结果是d位.,n,flag);printfCV);/getch();该语句可防止

11、运行结束时退出程序,这样才能看到屏幕内容 systemCpause);/该语句同样可防止运行结束时退出程序,但多了提示”请按任意键继 续.”这样才能看到屏幕内容程序2:# include# include# include# include# defi neDEBUG1当程序在调试阶段时DEBUG为1# defi neHEAD_M70000 /存储阶乘运算结果的数组长度,该参数不要超过70000# defi neHEAD_N5int lnput_uint(); /无符号整形输入函数int lnput_uint() 无符号整形输入函数int count_a=0,ratio=l,count_c=0,number=Ozjudge=l;count_a计数变量;ratio转换系数,1, 10, 100等;/count_c计数变量:number函数返回值;/ judge输入判断变量,4出错;char strHEAD_N;for (count_a=0;count_a=0;count_a-/count_c-) strcount_a=getchar();if(!(strcount_a=,0, & strcount_a=l9,) 11 (strcount_a=10) judge=-l;if(strcount_a=10 11 count_a=0)if(strcount_a=

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

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