这道题最后结果非常大,已经超出long long int了,因此,可以将10进制转化 为万进制,将万进制 的每一位放到一个数组中,注意要从大到小计算。
#include<iostream>
#include<cstdio>
using namespace std;
int an[10000];
void js(int n) //计算阶乘
{
int i,j,k;
for(i=0;i<10000;i++)
{
an[i]=0;
}
an[0]=1;
for(i=2;i<=n;i++)
{
for(k=9999;k>0;k--)
{
if(an[k])
{
break;
}
}
for(j=k;j>=0;j--)
{
an[j]=an[j]*i;
while(an[j]>=10000) //超过一万进位
{
//cout<<an[j]<<endl;
an[j+1]+=an[j]/10000;
an[j]=an[j]%10000;
if(an[j+1]>=10000)
{
an[j+2]+=an[j+1]/10000;
an[j+1]=an[j+1]%10000;
}
}
}
}
}
int main()
{
int n,i,k=0,kk=1;
while(scanf("%d",&n)!=EOF)
{
for(i=9999;i>=0;i--)
{
if(an[i])
{
printf("%d",an[i]);
i--;
break;
}
}
for(;i>=0;i--)
{
printf("%04d",an[i]);
}
cout<<endl;
}
return 0;
}