求助50分n大于10的时候乘法出问题了

P1009 [NOIP1998 普及组] 阶乘之和

Rain3721 @ 2024-11-08 17:09:07

#include<bits/stdc++.h>
using namespace std;
#define MAX 20000
int a[MAX]={0},b[2]={0},ans[MAX]={};
int checkmult(){
    for(int i=0;i<MAX;i++){
        if(a[MAX-i-1]>9){
            a[MAX-i-2]+=a[MAX-i-1]/10;
            a[MAX-i-1]%=10;
        }
    }
    return 0;
}
int add(){
    for(int i=0;i<MAX;i++){
        ans[MAX-1-i]+=a[MAX-1-i];
        if(ans[MAX-1-i]>9){
            ans[MAX-i-2]+=ans[MAX-i-1]/10;
            ans[MAX-i-1]%=10;
        }
    }
    return 0;
}
int mult(int n){
    int c[MAX]={0};
    b[0]=n/10,b[1]=n%10;
    for(int i=0;i<2;i++){
        for(int j=0;j<MAX;j++){
            c[MAX-i-j-1]=b[1-i]*a[MAX-1-j];
        }
        checkmult();
    }
    for(int k=0;k<MAX;k++) a[k]=c[k];
    return 0;
}
void printans(){
    int j=0;
    for(j;j<MAX;j++) if(ans[j]>0) break;
    if(j==MAX) cout<<0;
    else for(int i=j;i<MAX;i++) cout<<ans[i];
}
void print(){
    int j=0;
    for(j;j<MAX;j++) if(a[j]>0) break;
    if(j==MAX) cout<<0;
    else for(int i=j;i<MAX;i++) cout<<a[i];
}
int main(){
    int n; cin>>n;
    a[MAX-1]=1;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=i;j++){
            mult(j);
        }
        add();
        /*cout<<b[0]<<b[1]<<"   ";
        print();
        cout<<"    ";
        printans();
        cout<<endl;*/
        for(int k=0;k<MAX;k++) a[k]=0;
        a[MAX-1]=1;
    }
    printans();
    return 0;
}

|