P1009 [NOIP1998 普及组] 阶乘之和

P1009 [NOIP1998 普及组] 阶乘之和

zeng_yanqin @ 2024-10-31 20:01:23

50分求调

MAN!MAN!啥意思,我照着洛谷深入浅出程序设计竞赛(基础篇)写的,居然还错,是书本的问题,还是我代码的问题?

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

by zjr2014 @ 2024-10-31 20:03:19

@zeng_yanqin

高精度!!!!!!!!!


by zeng_yanqin @ 2024-10-31 20:08:31

@zjr2014

我是初学者,还不懂高精度


by zjr2014 @ 2024-10-31 20:10:16

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+1;
int a[maxn]={0,1},alen=1,n,sum[maxn],sumlen=1,jw;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        jw=0; 
        for(int j=1;j<=alen;j++){
            a[j]*=i;
            a[j]+=jw;
            jw=a[j]/10;
            a[j]%=10;
        }
        while(jw>0){
            a[alen+1]+=jw;
            jw=a[alen+1]/10;
            a[alen+1]%=10;
            alen++;
        }
        sumlen=max(sumlen,alen);
        for(int j=1;j<=sumlen;j++){
            sum[j]+=a[j];
            sum[j+1]+=sum[j]/10;
            sum[j]%=10;
        }

        if(sum[sumlen+1]!=0){
            sumlen++;
        }

    }
    for(int i=sumlen;i>=1;i--){
        cout<<sum[i];
        }
    return 0;
}

@zeng_yanqin


by zeng_yanqin @ 2024-10-31 20:12:46

@zjr2014

谢谢


by yuechenxi130407 @ 2024-10-31 20:13:15

@zjr2014
我用的Python


by xiaomazai @ 2024-11-03 12:26:05

【其他说明】

注,《深入浅出基础篇》中使用本题作为例题,但是其数据范围只有n≤20,使用书中的代码无法通过本题。


by xiaoliruizhi @ 2024-11-12 21:28:33

@zeng_yanqin 建议你看看这个


|