高精度阶乘之和(c++)
查看原帖
高精度阶乘之和(c++)
1459616
JSSL9718楼主2024/11/22 18:39

初学者搞了老半天终于通过了,不容易

#include <iostream>
#include <vector>
using namespace std;


vector<int> add(vector<int> &a, vector<int> b)
{
    vector<int> C;

    int t = 0;

    for (int i = 0; i < a.size() || i < b.size(); i++)
    {
        if (i < a.size())
        {
            t += a[i];
        }
        if (i < b.size())
        {
            t += b[i];
        }
        C.push_back(t % 10);
        t /= 10;
    }

    if (t) C.push_back(1);

    return C;

}

vector<int> mul(vector<int>& A, int B)
{
    vector<int> C;
    int t = 0;
    for (int i = 0; i < A.size() || t; i++)
    {
        if (i < A.size())   t += A[i] * B;
        C.push_back(t % 10);
        t /= 10;
    }
    return C;
}


vector<int> fac(int n)
{
    vector<int> res = { 1 };

    for (int i = 2; i <= n; i++)
    {
        res = mul(res, i);
    }

    return res;
}

int main()
{

    int n;
    cin >> n;

    vector<int> res = { 0 };

    for (int i = 1; i <= n; i++)
    {
        res = add(res, fac(i));
    }

    for (int i = res.size() - 1; i >= 0; i--)
    {
        cout << res[i];
    }

    return 0;
}
2024/11/22 18:39
加载中...