#include <stdio.h>
#include <string.h>
long long number[2][10000001];
int index = 1;
void fun(int n)
{
number[n%2][0]=0;
for(int i = 0;i<index;i++)
{
number[n%2][i]+=number[(n+1)%2][i]*n;
number[n%2][i+1]=number[n%2][i]/1000000;
number[n%2][i]=number[n%2][i]%1000000;
}
while(number[n%2][index])
{
number[n%2][index+1]=number[n%2][index]/1000000;
number[n%2][index]=number[n%2][index]%1000000;
index++;
}
}
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i = 0 ;i<=1000000;i++)
number[1][i]=number[0][i]=0;
number[1][0]=1;
index = 1; //表示一共有多少位数
for(int i = 2;i<=n;i++)
fun(i);
for(int i=1000000;i>=0;i--)
if(number[(n)%2][i]!=0)
{
printf("%I64d",number[(n)%2][i--]);
for(;i>=0;i--)
printf("%06I64d",number[(n)%2][i]);
}
putchar('\n');
}
return 0;
}
大数的阶乘
最新推荐文章于 2021-11-30 09:00:20 发布