爆0求调

P1009 [NOIP1998 普及组] 阶乘之和

fireflyQAQ @ 2024-09-07 13:46:16

qwq

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=55;
ll a[10000],b[10000],n,sum;
int main()
{
    cin>>n;
    a[0]=1;
    b[0]=1;
    for(int i=2;i<=n;i++)
    {
        for(int j=0;j<N;j++)
        {
            b[j]*=i;
        }
        for(int j=0;j<N;j++)
        {
            if (b[j]>9)
            {
                b[j+1]+=b[j]/10;
                b[j]%=10;
            }
        }
        for (int j=0;j<N;j++)
        {
            a[j]+=b[j];
            if (a[j]>9)
            {
                a[j+1]+=a[j]/10;
                a[j]%=10;
            }
        }
    }
    for(int i=100;i>=0&&a[i]==0;i--)
    {
        sum++;
    }
    for(int j=sum;j>=0;j--)
    {
        cout<<a[j];
    }
    return 0;
}

by Deric456 @ 2024-09-07 13:52:29

AC代码求关

#include<bits/stdc++.h>
using namespace std;
string pl(string a,string b){
    string u="";
    int lena=a.length();
    int lenb=b.length();
    int a1[100000]={},b1[100000]={},c1[100000]={};
    for(int i=0;i<lena;i++){
        a1[lena-1-i]=a[i]-'0';
    }
    for(int i=0;i<lenb;i++){
        b1[lenb-1-i]=b[i]-'0';
    }
    int lenc=max(lena,lenb);
    int i=0,i2;
    for(;i<=lenc;i++){
        c1[i]+=(a1[i]+b1[i]);
        c1[i+1]=c1[i]/10;
        c1[i]%=10;
    }
    for(;c1[i]==0;i--);
    i2=i;
    for(;i2>=0;i2--){
        u.append(to_string(c1[i2]));
    }
    return u;
}
string jc(int n){
    string s="0";
    int y=0;    
    int res[100000]={1},lena=1;
    while(n--){//进行n次*2;
        y++;
        for(int i=0;i<lena;i++) res[i]*=y;//先对n-1次的结果,每一位都乘y
        for(int i=0;i<lena;i++){//进行进位操作
            if(res[i]>9){
                res[i+1]+=res[i]/10;
                res[i]%=10;
                if(i==lena-1){
                    lena++;
                }
            }
        }
    }
    for(;lena>=0;lena--){
        s.append(to_string(res[lena]));
    }
    return s;
}
int main()
{
    string s="0";
    string sum="0";
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        s=jc(i);
        sum=pl(s,sum);
    }
    cout<<sum;
    return 0;
}

|