
#include <stdio.h>
int num[6000];
void Print_Factorial ( const int N )
{
if(N < 0 || N > 1000) printf("Invalid input");
else
{
int k = 1; // 位数
int t = 0; // 进位位
num[0] = 1; // 0!= 1
int tmp = 0;
// 最基本的乘法运算思想,将临时结果的每位与阶乘元素相乘
for(int i = 2; i <= N; i ++ ) // 开始阶乘,阶乘元素从 2 开始
{
for (int j = 0; j < k; j ++ )
{
tmp = num[j] * i + t; // 相应阶乘中的一项与当前所得临时结果的某位相乘(加上进位)
num[j] = tmp % 10; // 更新临时结果的该位上的信息
t = tmp / 10; // 看是否有进位
}
while(t) // 如果有进位
{
num[k ++ ] = t % 10; // 新加一位,添加信息。位数+1
t /= 10; // 看还能不能进位
}
}
for (int i = k - 1; i >= 0; i -- ) printf("%d", num[i]);
}
}
int main()
{
int N;
scanf("%d", &N);
Print_Factorial(N);
return 0;
}