【C--】n ≥ 5后就乱套了 :(

P1009 [NOIP1998 普及组] 阶乘之和

_TeaClaudz_ @ 2022-12-04 20:31:03

#include<bits/stdc++.h>
using namespace std;

int main() {
    vector<int> s, t;
    s.clear();
    s.push_back(0);
    int n;
    cin >> n;
    for(int i = 1; i <= n; ++i) {
        t.clear();
        t.push_back(1); 
        for(int j = 1; j <= i; ++j) {
            for(int c = 0; c < t.size(); ++c) t[c] *= j;
            int l = 1;
            while(l < t.size()) {
                if(t[l-1] > 9) {
                    t[l] += t[l-1] / 10;
                    t[l-1] %= 10;
                    l++;
                } else {
                    break;
                }
            }
            if(l == t.size()) {
                while(t[l-1] > 9) {
                    t.push_back(t[l-1] / 10);
                    t[l-1] %= 10;
                }
            }
            /*for(int c = t.size() - 1; c >= 0; --c) {
                printf("%d", t[c]);
            }
            printf("\n");*/
        }
        for(int c = 0; c < t.size(); ++c) {
            s[c] += t[c];
            int l = c+1;
            while(l < s.size()) {
                if(s[l-1] > 9) {
                    s[l] += s[l-1] / 10;
                    s[l-1] %= 10;
                    l++;
                } else {
                    break;
                }
            }
            if(s[l-1] > 9 && l == s.size()) s.push_back(s[l-1] / 10), s[l-1] %= 10;
        }
    }
    for(int i = s.size() - 1; i >= 0; --i) {
        printf("%d", s[i]);
    }
    return 0;
}

|