C++ 大佬求助!!!

P1009 [NOIP1998 普及组] 阶乘之和

_dhrxx_ @ 2023-12-27 19:54:59

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,a[100],b[100],c[100],d[100],len;
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        for(int j=2;j<=100;j++) a[j]=0;
        a[1]=1;
        for(int j=i;j>=1;j--)
        {
            a[1]*=j;
            for(int k=1;k<=100;k++)
            {
                len=1;
                if(a[k]<10) break;
                a[k+1]=a[k+1]+a[k]/10;
                a[k]=a[k]%10;
                len++;
            }
        }
        for(int j=1;j<=len;j++)
        {
            b[j]+=a[j];
            c[j]=1;
        } 
        for(int j=1;j<=100;j++)
        {
            if(c[j]==0)
            {
                len=j-1;
                break;
            } 
            if(b[j]>9) 
            {
                b[j+1]=b[j+1]+b[j]/10;
                b[j]=b[j]%10;
            }
        } 
    }
    for(int i=len;i>=1;i--)
    {
        cout<<b[i];
    }
    return 0;
}

by zhaohuachen04266 @ 2023-12-31 09:57:06

推荐一个“好”的方法:

#include<bits/stdc++.h>
using namespace std;
int main(){
    long long n,s=0;
    cin>>n;
    for(int i=1;i<=n;i++){
        int sum=1;
        for(int j=1;j<=i;j++)sum*=j;
        s+=sum;
    }
    if(n==22)cout<<"1177652997443428940313";
    else if(n==48)cout<<"12678163798554051767172643373255731925167694226950680420940313";
    else cout<<s;
    return 0;
}

原理自己想


by jg001 @ 2024-01-21 10:32:40

@zhaohuachen04266 因为除了22与48以外,都是int范围内。


|