50分高精求助,悬关

P1009 [NOIP1998 普及组] 阶乘之和

I_love_DT @ 2024-02-21 22:00:33


#include<bits/stdc++.h>
using namespace std;
int a[105],b[105],c[105],d[105];
int main(){
    int n;
    cin>>n;
    int len2=1;
    for(int i=1;i<=n;i++){
        memset(d,0,sizeof(d));
        int len=1;
        a[1]=1;
        for(int j=1;j<=i;j++){
            memset(b,0,sizeof(b));
            int k=1;
            while(k<=len||b[k]>=10){
                b[k]+=a[k]*j;
                b[k+1]+=b[k]/10;
                b[k]%=10;
                k++;
            }
            while(!b[k])k--;
            len=k;
            for(int i=1;i<=len;i++)a[i]=b[i];
        }
        int k=1;
        while(k<=max(len,len2)||d[k]>=10){
            d[k]+=b[k]+c[k];
            d[k+1]+=d[k]/10;
            d[k]%=10;
            k++;
        }
        while(!d[k])k--;
        len2=k;
        for(int i=1;i<=len2;i++)c[i]=d[i];
    }
    for(int i=len2;i>=1;i--)cout<<d[i];
    return 0;
}

by 2023hkm @ 2024-02-22 10:07:26

AC代码

#include<bits/stdc++.h>
using namespace std;
int a[101],b[101],c[101];
string sa,sb;
int lena,lenb,lenc;
int main(){
    cin>>sa;
    lena=sa.size();
    for(int i=1;i<=lena;++i){
        a[i]=sa[lena-i]-'0';
    }
    cin>>sb;
    lenb=sb.size();
    for(int i=1;i<=lenb;++i){
        b[i]=sb[lenb-i]-'0';
    }
    int x=0;
    lenc=1;
    while(lenc<=lena+1||lenc<=lenb+1){
        c[lenc]=a[lenc]+b[lenc]+x;
        x=c[lenc]/10;
        c[lenc]%=10;
        ++lenc;
    }
    while(c[lenc]==0&&lenc>1){
        lenc--;
    }
    for(int i=lenc;i>=1;--i){
        cout<<c[i];
    }
    return 0;   
}

求关


|