您的位置:首页 > 其它

阶乘的精确值

2014-07-13 10:50 120 查看
输入不超过1000的正整数n,输出n!=1x2x3x……xn的精确结果

样例输入:30

样例输出:265252859812191058636308480000000

为了保存结果,需要分析1000!有多大。用计算器算一算,1000!约等于4*10^2567,因此可以用一个3000个元素的数组f保存,为了方便起见,让f[0]保存结果的个位,f[1]是十位,逆序表示是为了防止进位。。。。。,然后每次模拟手算即可完成n!,在输出时要忽略前导0,注意:如果结果就是0,那么忽略所有前导0后将什么都不能输出,所幸n!肯定不等于0,因此本题中可以忽略这个细节,程序如下:

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define MAXN 3000

int f[MAXN];

int main()

{

int i,j,n;

while(scanf("%d",&n)!=EOF)

{

memset(f,0,sizeof(f));

f[0]=1;

int c=0;

for(int i=2;i<=n;i++){

for(int j=0;j<=MAXN;j++){

int res=f[j]*i+c;

f[j]=res%10;

c=res/10;

}

}

int flag=1;

for(int i=MAXN;i>=0;i--){

//忽略前导0

if(flag&&f[i]!=0){

flag=0;

}

if(!flag)

printf("%d",f[i]);

}

printf("\n");

/*

//忽略前导0

for( int j=MAXN-1;j>=0;j--) if(f[j]) break;

for(int i=j;i>=0;i++)printf("%d",f[i]);

printf("\n");

*/

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: