#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
int m;
struct Begin {
int len, a[100];
Begin(int x = 0) {
memset(a, 0, sizeof(a));
for (len = 1; x; len++) {
a[len] = x % 10, x /= 10;
}
len--;
}
int& operator[](int i) {
return a[i];
}
void flatten(int L) {
len = L;
for (int i = 1; i <= len; i++) {
a[i + 1] += a[i] / 10, a[i] %= 10;
}
for (; !a[len]; len--);
}
void print() {
for (int i = max(len, 1); i >= 1; cout << a[i--]);
}
};
Begin operator+(Begin a, Begin b) {
Begin ans;
int len = max(a.len, b.len);
for (int i = 1; i <= len; i++) {
ans[i] += a[i] + b[i];
}
ans.flatten(len + 1);
return ans;
}
Begin operator*(Begin a, Begin b) {
Begin ans;
int len = a.len;
for (int i = 1; i <= len; i++) {
ans[i] = a[i] * b[i];
}
ans.flatten(len + 11);
return ans;
}
int main() {
cin >> m;
Begin ans(0), fac(1);
for(int i = 1; i <= m; i++){
fac = fac * i;
ans = ans + fac;
}
ans.print();
return 0;
}
求大佬看看是什么问题,这是深入浅出上的