#include <stdio.h>
#define Max 2000000
void factorial(int * a,int *p ,int num)
{
int c = *p , tmp = 0;
for(int i = 0; i < c; i++)
{
a[i] = a[i] * num + tmp;
tmp = a[i] / 10;
a[i] = a[i] % 10;
}
a[c] = tmp; //最高位的进位存在tmp中
while(a[c])
{
a[c+1] = a[c] / 10;
a[c++] %= 10;
}
*p = c;
}
void print(int *a,int c)
{
for(int i = c-1; i >= 0;i--)
{
printf("%d",a[i]);
}
printf("\n");
}
int main()
{
int c , i , num ,a[Max];
scanf("%d",&num);
a[0] = 1 , c = 1;
for(i = 1; i <= num; i++)
{
factorial(a,&c,i);
}
print(a,c);
return 0;
}
void factorial(int * a,int *p ,int tmp)
{
int b[Max] , i, j ,c = *p;
for(i = 0; i < c ; i++)
{
b[i] = a[i];
}
for(i = 1 ; i < tmp ; i++) // n-1次
{
for(j = 0; j < c; j++) // 相加
{
a[j] += b[j];
a[j+1] += a[j] / 10;
a[j] %= 10;
}
}
// 最高位的进位已存在c+ 1中
while(a[c]) //处理最高位
{
a[c+1] = a[c] / 10;
a[c] %= 10;
c++;
}
*p = c;
}