再发一次

P1009 [NOIP1998 普及组] 阶乘之和

Hydrogen_H @ 2024-11-23 21:37:01

#include<bits/stdc++.h>
using namespace std;
int f[110]={1,1};
int ans[110]={};
void p()
{
    int k;
    int s=0;
    ans[0]=max(ans[0],f[0]);
    for(k=1;k<=ans[0];k++)
    {
        ans[k]=f[k]+s+ans[k];
        s=ans[k]/10;
        ans[k]%=10;
    }
    if(ans[ans[0]]!=0)    ans[0]++;
    while(ans[ans[0]]==0&&ans[0]>0)    ans[0]--;
}
void t(int i)
{
    int s=0;
    int j;
    for(j=1;j<=f[0];j++)
    {
        f[j]*=i;
        f[j]+=s;
        s=f[j]/10;
        f[j]%=10;
    }
    while(s!=0)    
    {
        f[j+1]=s%10;
        s/=10;
        j++;
    }
    f[0]=j-1;
}
int main()
{
    int x;
    cin>>x;
    for(int i=1;i<=x;i++)
    {
        t(i);
        p();
    }
    for(int i=ans[0];i>0;i--)    cout<<ans[i];
    return 0;
}

运行结果:
输入:

48

输出: 2408245604249371128643412704635719313669930405657628498323935167694226950680420940313
答案:

12678163798554051767172643373255731925167694226950680420940313

by abssortpow1145145 @ 2024-11-25 18:05:03


#include <bits/stdc++.h>
using namespace std;
int main()
{
    long long n,k[100005]={0},l;
    cin >> n;
    for(int p=1;p<=n;p++)
    {
        int x=p,xk[10005]={1},len=1;
        for(int i=1;i<=x;i++)
        {
            int j,t=0;
            for(j=0;j<len || t!=0;j++)
            {
                int s=xk[j]*i+t;
                xk[j]=s%10;
                t=s/10;
            }
            len=j;
        }
        int h,tk=0;
        for(h=0;h<len || tk!=0;h++)
        {
            int v=xk[h]+k[h]+tk;
            k[h]=v%10;
            tk=v/10;
        }
        l=len;
    }
    for(int i=l-1;i>=0;i--)
    {
        cout << k[i];
    }
    return 0;
}
AC求关

|