欢迎来到天天文库
浏览记录
ID:52848614
大小:1.23 MB
页数:8页
时间:2020-03-26
《C语言程序设计教学全套-11大数阶乘.pptx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、大数阶乘主讲人:刘斌02问题:大数阶乘,计算用户输入的自然数n的阶乘,并统计位数。要求能精确计算较大数的阶乘,例如10000!分析:构造一个新的数据类型来计算并存储-数组。数组的应用数组的应用03123*45=?1231234545×3*5=152*5=101*5=53*4=122*4=81*4=4数组的应用具体思路可以描述为:04从个位开始用i去乘(i-1)!的每一位,假设已处理到第j位,将bit[j]*i加上前一位的进位carry(如果是个位即j=N-1,carry=0)先放到bit[j]中,再将商bit[j]/10作为
2、下一位的进位,余数bit[j]%10就是本位应放的值。如果最高位(下标为k的那位)已处理完,看本位是否有进位,如果有,即carry!=0,就将k--,继续重复以上操作,直到carry==0,此时,i!以求完毕,k的值为i!最高位的下标。数组的应用05(1)#include"stdio.h"(2)#defineN500000//n!的位数,要足够大(3)intFact(intbit[N],intn)(4){(5)inti,j,k=N-1,carry;//k表示最高位的下标(6)bit[k]=1;//0或1的阶乘(7)for(i
3、=2;i<=n;i++)(8){//以1!为基础,依次求2!,3!,直到n!(9)carry=0;//carry表示进位数,开始进位数为0(10)for(j=N-1;j>=k;j--)(11){(12)bit[j]=bit[j]*i+carry;(13)carry=bit[j]/10;//处理进位(14)bit[j]=bit[j]%10;//处理当前位(15)if(j==k&&carry)//当处理到(i-1)!的最高位元素时(即j==k),只要有进位(即carry!=0),最高位元素下标前移(16)k--;(17)}(18
4、)}(19)returnk;(20)}数组的应用06(21)intmain()(22){(23)staticintbit[N]={0};//存放n!的结果(24)inti,k,n;(25)printf("请输入一个不超过十万的自然数,计算它的阶乘:");(26)scanf("%d",&n);(27)k=Fact(bit,n);(28)printf("%d!=",n);(29)for(i=k;i5、d位数。",n,N-k);(33)return0;(34)}课堂实践::编写求整数a的b次方函数voidPower(intt[],intresult[],inta,intb)。要求对足够大的b能精确计算a的b次方,例如a的10000次方。数组的应用0708再见
5、d位数。",n,N-k);(33)return0;(34)}课堂实践::编写求整数a的b次方函数voidPower(intt[],intresult[],inta,intb)。要求对足够大的b能精确计算a的b次方,例如a的10000次方。数组的应用0708再见
此文档下载收益归作者所有