1 条题解

  • 0
    @ 2025-4-5 9:28:59
    #include <bits/stdc++.h>
    using namespace std;
    const int LEN = 50 * 2 + 50;
    int n;
    int aLen, sLen;
    int a[LEN + 5], s[LEN + 5];
    int main()
    {
        cin >> n;
    
        // 构建高精度的 0! 以及高精度的 0
        aLen = 1;
        a[0] = 1;
        sLen = 1;
        s[0] = 0;
    
        // n 次,每次算出 i!,然后累加进 s
        for (int i = 1; i <= n; i++)
        {
            // 【计算 i!】
            for (int j = 0; j < aLen; j++)
                a[j] *= i;
            for (int j = 0; j < aLen - 1; j++)
            {
                a[j + 1] += a[j] / 10;
                a[j] %= 10;
            }
            while (a[aLen - 1] > 9)
            {
                a[aLen] = a[aLen - 1] / 10;
                a[aLen - 1] %= 10;
                aLen++;
            }
            // 【s += i!】
            sLen = max(sLen, aLen);
            for (int i = 0; i < sLen; i++)
                s[i] += a[i];
            for (int j = 0; j < sLen - 1; j++)
            {
                s[j + 1] += s[j] / 10;
                s[j] %= 10;
            }
            while (s[aLen - 1] > 9)
            {
                s[sLen] = a[sLen - 1] / 10;
                s[sLen - 1] %= 10;
                sLen++;
            }
        }
    
        // 输出
        for (int i = sLen - 1; i >= 0; i--)
            cout << s[i];
        return 0;
    }
    
    • 1

    信息

    ID
    13413
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者