求调

P1009 [NOIP1998 普及组] 阶乘之和

4399__ @ 2024-08-27 11:23:00

本人蒻一个,恳请各位dalao调一下我这一坨`(>﹏<)′

#include<bits/stdc++.h>
using namespace std;
void gjdc (int aline,int bline,int a[10005],int b[100005],int c[100006]){
    for(int i=1;i<=aline;i++){
        for(int j=1;j<=bline;j++){
            c[i+j-1]+=a[i]*b[j];
            c[i+j]+=c[j+i-1]/10;
            c[i+j-1]%=10;
        }
    }
}
void gjdj(int a[10005],int b[100005],int c[100005],int long_line){
    for(int i=1;i<=long_line;i++){
        c[i]+=a[i]+b[i];
        c[i+1]+=c[i]/10;
        c[i]%=10;
    }   
} 
void jh(int a[100005],int b[100005],int line){
    for(int i=1;i<=line;i++){
        int t;
        t=a[i],a[i]=b[i],b[i]=t;
    }
}
int main(){
    int n,a[100005]={},b[100005]={},c[100005]={},d[100005]={},e[100005]={};
    cin>>n;
    a[1]=1,b[1]=1,c[1]=1;
    for(int i=1;i<=n;i++){
        b[1]=i%10,b[2]=i/10;
        gjdc(sizeof(a),sizeof(b),a,b,c);
        gjdj(c,d,e,max(sizeof(c),sizeof(d)));
        jh(a,c,sizeof(c));
        jh(e,d,sizeof(e));
        memset(c,0,sizeof(c));
        memset(e,0,sizeof(e));
    }
    for(int i=1;i<=sizeof(d);i++){
        cout<<d[i];
    }
    return 0;
}

|