WAWA

P1009 [NOIP1998 普及组] 阶乘之和

moqwq @ 2023-03-13 20:45:35

#include <bits/stdc++.h>
using namespace std;
int a[10000001],b[100000005];
int main()
{
    int n,x=0,s=1;
    cin>>n;
    a[1]=1;
    for(int d=0;d<n;d++)
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=s;j++)
            {
                a[j]=a[j]*i+x;
                x=a[j]/10;
                a[j]%=10;
                if(x>0&&j==s)
                {
                    s++;
                }
            }
        }
        for(int i=1;i<=s+1;i++)
        {
            b[i]+=a[i];
            if(b[i]>=10)
            {
                b[i]%=10;
                b[i+1]++;
            }
        }
    }
    if(a[s]==0)
    {
        s--;
    }
    for(int i=s;i>=1;i--)
    {
        cout<<a[i];
    }
    return 0;
}

by xxc123 @ 2023-04-10 22:18:47

代码写好看点!!! 分函数,这样容易找错。 求关注


#include<iostream>
using namespace std;
int a[1001],b[1001];
void add()
{
    int t=0;
    for(int i=1000;i>=1;i--)
    {
        b[i]=b[i]+a[i]+t;
        t=b[i]/10;
        b[i]%=10;
    }
}
void multiplication(int x)
{
    int t=0;
    for(int i=1000;i>=1;i--)
    {
        a[i]=a[i]*x+t;
        t=a[i]/10;
        a[i]%=10;
    }
}
void print()
{
    int flag=0;
    for(int i=1;i<=1000;i++)
    {
        if(b[i]!=0) flag=1;
        if(flag) cout<<b[i];
    }
}
int main()
{
    a[1000]=b[1000]=1;
    int n;
    cin>>n;
    for(int i=2;i<=n;i++)
    {
        multiplication(i);
        add();
    }
    print();
    return 0;
}

|