/*再次更正*/
/* 求n! (0<n<10000)*/
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
void cal(unsigned int *s,int n)
{
unsigned long p,k=0;
int i;
static int m=1,b=0; /* b用来记录后面的0 */
for(i=b;i<m;i++)
{
p=(long)s[i]*(long)n+k;
k=p/10000;
s[i]=p-k*10000;
}
if(!s[b])
{
b++;
}
if(k){
s[m++]=k;
}
}
int main(void)
{
unsigned int *s;
int i;
int n;
scanf("%d",&n);
s=(unsigned int *)malloc(n*sizeof(s));
for(i=1;i<n;i++)
{
s[i]=0;
}
s[0]=1;
for(i=2;i<=n;i++)
{
cal(s,i);
}
printf("\n%d!=\n",n);
n--;
while(!s[n])
{
n--;
}
printf("%d",s[n--]);
for(i=n;i>=0;i--)
{
printf("%04d",s[i]);
}
printf("\n");
free(s);
getch();
return 0;
}