/*用Turbo C 2.0编译
计算1—9999的阶乘*/
#include<math.h>
#include<stdio.h>
#include<alloc.h>
int mul(int a[],int d,int x)
{ long y=0;int i;
for(i=0;i<d;i++)
{ y+=a[i]*(long)x;
a[i]=y%10000;
y/=10000;
} a[d]=y;
return d+!!y;
}
void main()
{ int n,i,j,d=1,*a;long s;
printf("n=");scanf("%d",&n);
if(n<1||n>9999)return;
s=long((log(2*M_PI*n)/2+n*(log(n)-1))/log(10)+1);
a=(int*)malloc((s/4+1)*sizeof(int));
for(a[0]=i=1;i<=n;i++)
d=mul(a,d,i);
printf("\n%d!=%d",n,a[d-1]);
for(j=d-2;j>=0;j--)
printf("%04d",a[j]);
free(a);
}