75?

P1009 [NOIP1998 普及组] 阶乘之和

Hydrogen_H @ 2024-11-22 15:17:56

#include<bits/stdc++.h>
using namespace std;
int f[100000]={1,1};
int ans[100000]={};
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]++;
}
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;
}
int main()
{
    int x;
    cin>>x;
    for(int i=1;i<=x;i++)
    {
        t(i);//i!=(i-1)!*i
        p();//加一下
    }
    while(ans[ans[0]]==0&&ans[0]>0)    ans[0]--;
  //删除前导0
    for(int i=ans[0];i>0;i--)    cout<<ans[i];
    return 0;
}

运行结果:
输入:48
输出:24082456042493711286434127046357193136699304056576284983239351676942269506804209 40313 答案:12678163798554051767172643373255731925167694226950680420940313


|