大数的阶乘n.docx
- 文档编号:30275698
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:10
- 大小:168.94KB
大数的阶乘n.docx
《大数的阶乘n.docx》由会员分享,可在线阅读,更多相关《大数的阶乘n.docx(10页珍藏版)》请在冰豆网上搜索。
大数的阶乘n
信息科学与工程学院
编程设计实验文档
题目:
较大数的阶乘
1、设计目的:
1.解决一般大数的阶乘问题,可以避免一般算法实行时的数据溢
出的弊端
2.培养自己对算法的理解,提高自身的水平
3.熟练对c语言的操作,加强对c语言的理解
2、设计分析:
实现一般较小的数的阶乘,可以直接利用普通的乘法进行循环
运算即可,即利用s=n*(n-1)的核心算法。
但是,当n比较
大的时候,会造成运算的结果,即s会变得特别大,便会造成
数据溢出。
此时,就需要另一种算法,是结果可以保存,不溢
出。
那么,这个算法就是要解决这个问题,所以,我想到另一
方式用来解决这个问题,即利用数组。
如下:
首先,定义两个整型的数组:
inta[200];//暂且先设定是200位,我称之为“结果数组”
intadd[200];//我称之为“进位数组”
现在具体说明两个数组的作用:
1.a[200]
比如说,一个数5的阶乘是120,那么我就用这个数组存储它:
a[0]=0
a[1]=2
a[2]=1
因此,用这样的数组我们可以放阶乘后是200位的数
2.在介绍add[200]之前,我介绍一下算法的思想,就以6!
为
例:
从上面我们知道了5!
是怎样存储的。
就在5!
的基础上来计算6!
,演示如下:
fac[0]=fac[0]*6=0
fac[1]=fac[1]*6=12
fac[2]=fac[2]*6=6
3.现在就用到了我们的:
“进位数组”add[1000].
先得说明一下:
add[i]就是在第2步中用算出的结果中,第
i位向第i+1位的进位数值。
还是接上例:
add[0]=0;
add[1]=1;//计算过程:
就是(a[1]+add[0])%10=1
add[2]=0;//计算过程:
就是(a[2]+add[1])%10=0
.......
.......
.......
add[i+1]=(a[i+1]+add[i])%10
3、算法流程图
N
Y
N
Y
4、主要模块功能及程序说明
本程序主要分为三个模块,第一个模块就是判断输出是否错误,
当输入的数据是小于1的时候,程序的输出结果是显示“输入
错误;第二个模块当输入正确时模拟一个乘法的运算,先算出
该数的阶乘是多少兵保存在a[200]这个数组中;第三个模块
根据所得结果位数的判断如何按4个数字一组的输出这个数,
当所得结果为4的倍数时,我选择的是单独输出末尾四个数,
剩下的按“1234,”这样的形式输出,当所得结果不是4的倍
数时,我选择优先输出前面的几个数,把后面的数字按四个一
组“,1234”这样的形式输出。
5、实验结果:
1.当输出的数字小于0的时候
2.当输入的数所得的结果是4的倍数时,如输入11时
3.当输入的数所得的结果不是4的倍数时,如15
附录
A变量及函数功能说明
n是输入的数据
S是输出结果的位数除以4所得的余数
t是输出结果的位数除以4所得的商值
a[200]是用来保存最后结果的数组
temp为阶乘的任一元素与临时结果的某位的乘积结果
digit表示所得结果的位数
carry表示进位
B.源程序代码
#include
intmain()
{
intn,s,t;
inta[200];
intcarry;
intdigit=1;
inttemp,i,j;
scanf("%d",&n);
a[0]=1;
if(n<1)
printf("输入错误/n");
else
{
for(i=1;i<=n;++i)
{
for(j=1,carry=0;j<=digit;++j)
{
temp=a[j-1]*i+carry;
a[j-1]=temp%10;
carry=temp/10;
}
while(carry)
{
a[++digit-1]=carry%10;
carry/=10;
}
}
t=digit/4;
s=digit%4;
if(s==0)
{
for(i=t;i>1;i--)
printf("%d%d%d%d,",a[4*i-1],a[4*i-2],a[4*i-3],a[4*i-4]);
printf("%d%d%d%d",a[3],a[2],a[1],a[0]);
}
else
{
for(i=digit-1;i>=digit-s;i--)
printf("%d",a[i]);
for(i=t;i>0;i--)
printf(",%d%d%d%d",a[4*i-1],a[4*i-2],a[4*i-3],a[4*i-4]);
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大数 阶乘