![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3ed04c2afe37dbfc8980c377a97df8d2.png)
#include <stdio.h>
#include <math.h>
struct biginteger{
int digit[10000];
int size;
void init(){
for(int i=0;i<10000;i++){
digit[i]=0;
size=0;
}
}
void set(int x){
init();
do{
digit[size++]=x%10000;
x/=10000;
}while(x!=0);
}
void output(){
for(int i=size-1;i>=0;i--){
if(i!=size-1)
printf("%04d",digit[i]);
else
printf("%d",digit[i]);
}
printf("\n");
}
biginteger operator * (int x) const{
biginteger ret;
ret.init();
int carry=0;
for(int i=0;i<size;i++){
int tmp=digit[i]*x+carry;
carry=tmp/10000;
ret.digit[ret.size++]=tmp%10000;
}
if(carry!=0)
ret.digit[ret.size++]+=carry;
return ret;
}
}a;
char str1[1001];
int main(){
int n;
while(scanf("%d",&n)!=EOF){
a.set(1);
for(int i=1;i<=n;i++)
a=a*i;
a.output();
}
return 0;
}