用高精度计算出 S = 1! 2! 3! \cdots n!S=1! 2! 3! ⋯ n!
时间: 2023-11-18 20:54:09 浏览: 196
题目要求我们计算 S = 1! + 2! + 3! + ... + n!,其中 n ≤ 50。
我们可以使用高精度计算来解决这个问题。具体步骤如下:
1. 定义一个数组 a,用来存储高精度数。
2. 将 a 初始化为 1,表示 S 的初始值为 1。
3. 从 2 开始循环到 n,每次循环计算 i 的阶乘,并将结果加到 a 中。
4. 循环结束后,将 a 中所有的数相加,得到 S 的值。
下面是具体的实现代码:
```
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 10000; // 数组最大长度
int a[MAXN]; // 存储高精度数的数组
void multiply(int x) { // 将数组 a 中的数乘以 x
int carry = 0;
for (int i = 0; i < MAXN; i++) {
int tmp = a[i] * x + carry;
a[i] = tmp % 10;
carry = tmp / 10;
}
}
int main() {
int n;
cin >> n;
memset(a, 0, sizeof(a)); // 将数组 a 初始化为 0
a[0] = 1; // 初始值为 1
for (int i = 2; i <= n; i++) {
multiply(i); // 将数组 a 中的数乘以 i
}
int sum = 0;
for (int i = 0; i < MAXN; i++) {
sum += a[i];
}
cout << sum << endl;
return 0;
}
```
阅读全文