关于阶乘的程序编写
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数的阶乘
很多教材中的阶乘程序只是简单地用了阶乘的定义,算法比较简单,考虑也不够全面,其相应的程序如下:
/* 数的阶乘(经典版)*/
#include"stdio.h"
main()
{
extern jiecheng(int n);
int n;
printf("请输入一个数:");
scanf("%d",&n);
jiecheng(n);
}
extern jiecheng(int n)
{
long result=1;
int i;
for(i=1;i<=n;i++)
result*=i;
printf("该数的阶乘为:%ld\n",result);
}
该函数在参数n比较小的时候运行完全正常,但是随着n变大(如,超过12)就出现
了问题,结果会溢出而变成意料之外的数据,究其原因,是因为任何基本类型的变量都有一定的表示范围。
要计算更大参数的阶乘,可以使用数组存放阶乘结果,于是有了下面的程序:
/* 数的阶乘(改进版)*/
#include"stdio.h"
main()
{
int n;
printf("请输入一个数:");
scanf("%d",&n);
jiecheng(n);
}
int jiecheng(int n)
{
int m,i,j,c,t,a[1000];
a[0]=1;
m=1;
for(i=2;i<=n;i++)
{
for(c=0,j=0;j<m;j++)
{
t=a[j]*i+c;
a[j]=t%10;
c=t/10;
}
while(c)
{
a[m++]=c%10;
c/=10;
}
}
printf("该数的阶乘为:");
for(j=m-1;j>=0;j--)
printf("%d",a[j]);
printf("\n");
}
这样一来,就可以计算大数的阶乘了。
如有疑问,多谢赐教!。