高精度数乘以低精度数,代模板即可。

代码:

#include<iostream>
#include<cstring>
using namespace std;
const int MAX=1e5+10;
int a[MAX],cnt;
//a=a*b
void multi(int b){
    int add=0,t;
    for(int i=1;i<MAX;++i){
        t=a[i]*b+add;
        a[i]=t%10;
        add=t/10;
    }
}
int main(){
    int n;
    while(~scanf("%d",&n)){
        if(n<=1){
            printf("%d\n",1);
            continue;
        }
        memset(a,0,sizeof(a));
        a[1]=1,cnt=1;
        for(int i=1;i<=n;++i) multi(i);
        cnt=MAX-1;
        while(!a[cnt]) --cnt;
        for(int i=cnt;i>=1;--i) printf("%d",a[i]);
        printf("\n");
    }
    return 0;
}