爆0求助

P1009 [NOIP1998 普及组] 阶乘之和

zqh_7plus @ 2024-08-28 22:44:34

rt,以下是我的代码,本人之前没学过高精,恳请指点

#include<bits/stdc++.h>
using namespace std;
const int pp=5e6+7;
int s[pp],x[pp],ans[pp],c[pp],n;
int main( ){
    cin>>n;
    ans[1]=1;
    int xlen=1;
    x[1]=1;
    for(int i=2;i<=n;i++){
        int xx=i,cnt=0;
        while(xx){
            s[++cnt]=xx%10;
            xx/=10;
        }
        int slen=cnt;
        for(int l=1;l<=xlen;l++){
            for(int r=1;r<=slen;r++){
                c[l+r-1]=x[l]*s[r];
                c[l+r]+=c[l+r-1]/10;
                c[l+r-1]%=10;
            }
        }
        int k;
        for(k=10000;k>=1&&c[k]==0;k--);
        int clen=k;
        for(k=10000;k>=1&&ans[k]==0;k--);
        int anslen=k;
        //printf("q%d %dq",anslen,clen);
        for(int i=1;i<=max(anslen,clen);i++){
            ans[i]=ans[i]+c[i];
            ans[i+1]+=ans[i]/10;
            ans[i]%=10;
        }
        for(int i=1;i<=clen;i++){
            x[i]=c[i];
        }
        xlen=clen;
        memset(c,0,sizeof(c));
        /*
        cout<<endl;
        for(k=100;k>=1&&ans[k]==0;k--);
        for(k;k>=1;k--){
            cout<<ans[k];
        }
        */
    }
    int k;
    for(k=10000;k>=1&&ans[k]==0;k--);
    for(k;k>=1;k--){
        cout<<ans[k];
    }
}

by hanxiaofensheng @ 2024-08-28 23:17:17

本蒟蒻献上50分小代码

#include<bits/stdc++.h>
using namespace std;
int n, ans=0;
int js(int n){
    int sum=1;
    for(int i=1;i<=n;i++) sum*=i;
    return sum;
}
int main(){
    cin>> n;
    for(int i=1;i<=n;i++) ans+=js(i);
    cout<<ans;
}

我可没用 高精度,求关注


by hanxiaofensheng @ 2024-08-29 14:11:48

@zqh_7plus

#include<bits/stdc++.h>
using namespace std;
int n, ans=0;
int js(int n){
    int sum=1;
    for(int i=1;i<=n;i++) sum*=i;
    return sum;
}
int main(){
    cin>> n;
    for(int i=1;i<=n;i++) ans+=js(i);
    cout<<ans;
}

我可没用高精度,求关注


by zqh_7plus @ 2024-08-29 16:17:03

@xiaokeai1234 已关,壶关


|