求调

P1009 [NOIP1998 普及组] 阶乘之和

ZZMmmmmm @ 2024-05-16 17:19:34

求调

#include <bits/stdc++.h>
using namespace std;
int n,a[120],b[120];

void ja(int *a,int *b)
{
    int jw=0;
    for(int i=1;i<=120;i++)
    {
        b[i]=a[i]+b[i]+jw;
        jw=b[i]/10;
        b[i]%=10;
    }
}

void ch(int *a,int c)
{
    int jw=0;
    for(int i=1;i<=120;i++)
    {
        a[i]=a[i]*c+jw;
        jw=a[i]/10;
        a[i]%=10;
    }
}

int main()
{
    cin>>n;
    a[1]=1;
    for(int i=1;i<=n;i++)
    {
        ch(a,i);
        ja(a,b);
    }
    bool flag=0;
    for(int i=120;i>=1;i--)
    {
        if(b[i]!=0) flag=1;
        if(flag) cout<<b[i];
    }
    return 0;
}

by bjqxszx_liruixuan @ 2024-05-18 16:09:01

#include<bits/stdc++.h>
using namespace std;
int a[5000],f[5000],k,n;
int main()
{  
    cin>>n;
    a[1]=1;k=1;
    for(int i=1;i<=n;i++)
    {  
        for(int j=1;j<=k;j++)
        {
            a[j]=a[j]*i;
        }
        for(int j=1;j<=k;j++)
        {  
            a[j+1]=a[j+1]+a[j]/10000;
            a[j]=a[j]%10000;
        }
        if(a[k+1]>0) 
        {
            k++; 
        }
        for(int j=1;j<=k;j++)
        {
            f[j]=f[j]+a[j];
            f[j+1]=f[j+1]+f[j]/10000;
            f[j]=f[j]%10000;
        }
    }
    cout<<f[k];
    for(int i=k-1;i>=1;i--)
    {
        printf("%04d",f[i]);
    }
    return 0;
}

|