求助

P1009 [NOIP1998 普及组] 阶乘之和

wangzaixi @ 2024-08-22 19:43:27

#include<iostream>
using namespace std;
long long ans1[100000],ans2[100000],ans3[100000000000];
int n;
void jc(){
    int k=1,jw=0,temp;
    ans1[1]=1;
    for(int i=1;i<=n;i++){
        jw=0;
        for(int j=1;j<=k;j++){
            temp=ans1[j]*i+j;
            jw=temp/10;
            ans1[j]=temp%10;
        }
        while(jw!=0){
            k++;
            ans1[k]=jw%10;
            jw/=10;
        }
    }
    ans1[0]=k;
    k=1;
    ans2[1]=1;
    for(int i=1;i<=n;i++){
        jw=0;
        for(int j=1;j<=k;j++){
            temp=ans2[j]*i+jw;
            jw=temp/10;
            ans2[j]=temp%10;
        }
        while(jw!=0){
            k++;
            ans2[k]=jw%10;
            jw/=10;
        }
    }
    ans2[0]=k;
}
void Plus(){
    ans3[0]=max(ans1[0],ans2[0]);
    int jw=0,k;
    for(int i=1;i<=ans3[0];i++){
        k=ans1[i]+ans2[i]+jw;
        ans3[i]=k%10;
        jw=k/10;
    }
    if(jw!=0){
        ans3[0]++;
        ans3[ans3[0]]=jw;
    }
}
int main(){
    cin>>n;
    jc();
    Plus();
    for(int i=ans3[0];i>=1;i--){
        cout<<ans3[i];
    }
    return 0;
}

by _ayaka_ @ 2024-08-22 19:53:26

你谁呀你?


by MacArthur_sir @ 2024-08-22 19:54:44

@wangzaixi

#include<iostream>
#include<cstdio>
using namespace std;
int n,a[101]={0},s[101]={0};
void change(int x){//求积 
    int g=0;
    for(int i=100;i>=0;i--){
        a[i]=a[i]*x+g;
        g=a[i]/10;
        a[i]=a[i]%10;
    }
}
void qh(){//求和 
    int g=0;
    for(int i=100;i>=0;i--){
        s[i]=s[i]+a[i]+g;
        g=s[i]/10;
        s[i]=s[i]%10;
    }
}
void sc(){
    int w;
    for(int i=0;i<=100;i++){
        if(s[i]!=0){
            w=i;
            break;
        }
    }
    for(int i=w;i<=100;i++)
       cout<<s[i];
}
int main(){
    cin>>n;
    s[100]=a[100]=1;
    for(int i=2;i<=n;i++){
        change(i);
        qh();
    }
    sc();
    return 0;
}

求关


|