首页 > 代码库 > 阶乘的精确性

阶乘的精确性

/*
输入不超过1000的正整数n,输出n!=1*2*3*……*n的精确结果。
样例输入:30
样例输出:265252859812191058636308480000000
例如 n=3;s=6;
n=4;s=24;
n=5;s=120;
1000的阶乘需要一个3000位的数组来存
*/
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;

const int maxn=3003;//数组长度
int f[maxn];
int main()
{
int i,j,n,c,k;

while(cin>>n)
{
memset(f,0,sizeof(f));//清空数组
f[0]=1;

for(i=2;i<=n;i++)
{
c=0;
for(j=0;j<maxn;j++)
{
k=f[j]*i+c;
f[j]=k%10;
c=k/10;
}
}
for(j=maxn-1;j>=0;j--)
if(f[j]!=0)//利用0 1 来判断;
break;
for(i=j;i>=0;i--)
printf("%d",f[i]);
printf("\n");
}
return 0;
}

 

阶乘的精确性