您的位置:首页 > 其它

高精度阶乘

2014-01-18 20:41 113 查看
#include <stdio.h>
#include <string.h>
#define MAXSIZE 3000

int main(void)
{
int a[MAXSIZE];
int i,j,n;
scanf("%d",&n);
memset(a,0,sizeof(a));	//把数组所有元素初始为0
a[0]=1;		//0的阶乘为1
for(i=2;i<=n;++i)
{
int c=0;	//代表进位数
for(j=0;j<MAXSIZE;++j)
{
int s = a[j] * i + c;	//进行当前位数的阶乘
a[j]= s % 10;	//取余得当前位数
c= s/10;
}
}
for(j = MAXSIZE-1; j >= 0; --j)
if(a[j]){ break;}	//去掉前导0
for(i = j; i >= 0; --i)
printf("%d", a[i]);	//倒序输出
putchar('\n');
return 0;
}
这个数组的算法是开一个数组来模拟阶乘的位的,对每一次阶乘都做一次进位的循环,最后去掉前导0,便能得出结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: