You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
1.0 KiB

#include <bits/stdc++.h>
using namespace std;
vector<int> add(vector<int> A, vector<int> B) {
if (A.size() < B.size()) swap(A, B);
vector<int> C;
int t = 0;
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> mul(vector<int> A, int b) {
vector<int> C;
int t = 0;
// 8899 * 2 = 17798
for (int i = 0; i < A.size() || t; i++) {
if (i < A.size()) t += A[i] * b;
C.push_back(t % 10);
t /= 10;
}
while (C.size() > 1 && C.back() == 0) C.pop_back();
return C;
}
int main() {
int n;
cin >> n;
vector<int> F, RES;
//初始化
RES.push_back(0);
F.push_back(1);
for (int i = 1; i <= n; i++) { //
F = mul(F, i);
RES = add(RES, F);
}
//倒序输出
for (int i = RES.size() - 1; i >= 0; i--)
printf("%d", RES[i]);
return 0;
}