求10000以内n的阶乘
求10000以内n的阶乘。
输入
只有一行输入,整数n(0<=n<=10000)。
输出
一行,即n!的值。
样例输入
100
样例输出
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
Code
#include<cstdio>
const int n=10005;
const int m=100000;
int s[n]={1,1},x,i,j,len=1;
int main()
{
scanf("%d",&x);
for(i=2;i<=x;i++)
{
for(j=1;j<=len;j++)
s[j]*=i;
for(j=1;j<=len;j++)
{
s[j+1]+=s[j]/m;
s[j]%=m;
}
len++;
while(s[len])
{
s[len+1]=s[len]/m;
s[len]%=m;
len++;
}
}
while(len>1&&s[len]==0)
len--;
printf("%d",s[len]);
for(i=len-1;i>=1;i--)
printf("%05d",s[i]);
}