AcWing 5906. 阶乘和
原题链接
简单
作者:
没有雪的冬天
,
2025-01-04 11:44:16
,
所有人可见
,
阅读 1
C++ 代码
#include <bits/stdc++.h>
using namespace std;
// 高精度乘法:将大整数 A 乘以整数 b
vector<int> multiply(vector<int>& A, int b) {
vector<int> result;
int carry = 0; // 进位
// 逐位相乘
for (int i = 0; i < A.size(); i++) {
int product = A[i] * b + carry;
result.push_back(product % 10); // 当前位
carry = product / 10; // 进位
}
// 处理剩余的进位
while (carry) {
result.push_back(carry % 10);
carry /= 10;
}
return result;
}
// 高精度加法:将大整数 A 和大整数 B 相加
vector<int> add(vector<int> &A,vector<int> &B)
{
vector<int> C;
int carry=0;
for(int i=0;i<A.size()|| i<B.size();i++)
{
if(i<A.size()) carry+=A[i];
if(i<B.size()) carry+=B[i]; //完成低位的相加
C.push_back(carry%10);
carry=carry/10;
}
// 循环结束之后
if(carry) C.push_back(1);
return C;
}
int main() {
int n;
cin >> n;
vector<int> sum = {0}; // 初始化阶乘和为 0
vector<int> factorial = {1}; // 初始化当前阶乘为 1
// 计算 1! 到 n! 的和
for (int i = 1; i <= n; i++) {
factorial = multiply(factorial, i); // 计算 i!
sum = add(sum, factorial); // 将 i! 加到总和中
}
// 输出结果
for (int i = sum.size() - 1; i >= 0; i--) {
cout << sum[i];
}
cout << endl;
return 0;
}