50分求调
查看原帖
50分求调
1407882
emyutd楼主2024/11/29 20:57
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> mul(vector<int> A,vector<int> B)
{
    
    if(A.size()<B.size())
    {
        return mul(B,A);
    }
    int t=0;
    vector<int> C(A.size()+B.size(),0);
    for(int i=0;i<B.size();i++)
    {
        for(int j=0;j<A.size();j++)
        {
            C[i+j]=A[j]*B[i];
        }
    }
    for(int i=0;i<C.size();i++)
    {
        C[i+1]+=C[i]/10;
        C[i]%=10;
    }
    while(C.size()>1&&C.back()==0)
    {
        C.pop_back();
    }
    return C;
}
vector<int> add(vector<int> A,vector<int> B)
{
    if(A.size()<B.size())
    {
        return add(B,A);
    }
    int t=0;
    vector<int> C;
    for(int i=0;i<A.size();i++)
    {
        t+=A[i];
        if(i<B.size())
        {
            t+=B[i];
        }
        C.push_back(t%10);
        t/=10;
    }
    if(t) C.push_back(t);
    return C;
}
vector<int> fact(int a)
{
    vector<int> result(1,1);
    for(int i=2;i<=a;i++)
    {
        vector<int> multi;
        int temp=i;
        while(temp>0)
        {
            multi.push_back(temp%10);
            temp/=10;
        }
        result=mul(result,multi);
    }
    return result;
}
vector<int> sum_fact(int n)
{
    vector<int> sum(1,0);
    for(int i=1;i<=n;i++)
    {
        vector<int> fac=fact(i);
        sum=add(sum,fac);
    }
    return sum;
}
int main()
{
    int n;
    cin>>n;
    vector<int> result=sum_fact(n);
    for(int i=result.size()-1;i>=0;i--)
    {
        cout<<result[i];
    }
    return 0;
}
2024/11/29 20:57
加载中...