题目描述
用高精度计算出 S=1!+2!+3!+⋯+n!S=1!+2!+3!+⋯+n!(n≤50n≤50)。
其中 !
表示阶乘,定义为 n!=n×(n−1)×(n−2)×⋯×1。
例如,5!=5×4×3×2×1=120。
输入格式
一个正整数 n。
输出格式
一个正整数 S,表示计算结果。
输入输出样例
输入 #1复制
3
输出 #1复制
9
说明/提示
【数据范围】
对于 100% 的数据,1≤n≤50。
这题n最大是50,要用高精度
参考程序:
点个赞再走吧
#include <bits/stdc++.h>//万能头
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(t);
return c;
}
// 高精度计算
vector<int> multiply(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> factorial(int n) {
vector<int> a;
a.push_back(1);
for (int i = 2; i <= n; i++) {
a = multiply(a, i);
}
return a;
}
// 输出高精度计算结果
void print(vector<int> &a) {
for (int i = a.size() - 1; i >= 0; i--) {
cout << a[i];
}
cout << endl;
}
int main() {
int n;
cin >> n;
vector<int> ans;
for (int i = 1; i <= n; i++) {
vector<int> factorialResult = factorial(i);
ans = add(ans, factorialResult);
}
print(ans);
return 0;
}