求助啊

P1009 [NOIP1998 普及组] 阶乘之和

LRX1029 @ 2024-03-31 21:29:17

#include<stdio.h>
#include<iostream>
using namespace std;
long long n,a[90][90],b[90],sum[90],m,s;
int main(){
    scanf("%lld",&n);
    a[1][0]=1,a[1][1]=1;
    for(int i=2;i<=n;i++){
        b[1]=i%10;
        if(i>=10){
            b[0]=2;
            b[2]=i/10;
        }else{
            b[0]=1;
        }
        for(int j=1;j<=b[0];j++){
            s=0;
            for(int k=1;k<=a[i-1][0];k++){
                m=a[i-1][k]*b[j]+s;
                if(m>9){
                    s=m/10;
                    m%=10;
                }else{
                    s=0;
                } 
                a[i][k+j-1]=m;
                a[i][0]++;
            }
            if(s){
                a[i][0]++;
                a[i][a[i][0]]=s;
            }
        }
    }
    for(int i=1;i<=n;i++){
        s=0;
        for(int j=1;j<=a[i][0];j++){
            m=a[i][j]+sum[j]+s;
            if(m>9){
                m-=10;
                s=1;
            }else{
                s=0;
            }
            if(sum[j]==0){
                sum[0]++;
            }
            sum[j]=m;
        }
        if(s){
            sum[0]++;
            sum[sum[0]]=1;
        }
    } 
    s=0;
    for(int i=sum[0];i>=1;i--){
        if(s){
            printf("%lld",sum[i]);
        }else if(sum[i]!=0){
            printf("%lld",sum[i]);
            s=1;    
        }
    }
    return 0;
}

|