关于阶乘的程序编写
- 格式:doc
- 大小:27.50 KB
- 文档页数:3
数的阶乘
很多教材中的阶乘程序只是简单地用了阶乘的定义,算法比较简单,考虑也不够全面,其相应的程序如下:
/* 数的阶乘(经典版)*/
#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");
}
这样一来,就可以计算大数的阶乘了。
如有疑问,多谢赐教!。