N!
#include <stdio.h>
#include <string.h>
#define MOD 10000
int main()
{
int a[10000],b[6],c[10000];//10000!大概有10000*4=40000位,4位一存,数组大小需要开40000/4=10000的大小
int i,j,k,n,l,la,lb,lc;
while(EOF !=scanf("%d",&n))
{
if(n==0||n==1) {printf("1\n");continue;} //几种特殊情况
for(a[0]=1, la=1, k=2; k<=n; k++)
{
for(l=k,lb=0,i=0; l; i++) { b[i] = l%MOD; l/=MOD;lb++;}
memset(c,0,sizeof(c));
for(j=0; j<lb; j++)
for(i=0; i<la; i++)
{
c[j+i] += b[j]*a[i];
c[j+i+1] += c[j+i]/MOD;
c[j+i] %= MOD;
}
la = la+lb; //两个数相乘,假设a有4位,b有2位,那么a*b可能是5位或者6位,先假设有6位
if(0 == c[la-1]) la--; //看一下有没有第六位,第六位即c[5]
for(i=0; i<la; i++) a[i] = c[i];
}
printf("%d",a[la-1]);
for(i=la-2; i>=0; i--)
printf("%04d",a[i]);
printf("\n");
}
return 0;
}

浙公网安备 33010602011771号