1 条题解
-
0
方法1:
#include <bits/stdc++.h> using namespace std; // 函数用于高精度加法,接受两个大整数(以vector形式表示)a和b,返回它们的和 vector<int> add(vector<int> a, vector<int> b) { vector<int> c; // 用于存储加法结果 int cr = 0, i = 0; // cr表示进位,i是索引 // 直到所有位加完,并且没有进位 while (i < a.size() || i < b.size() || cr) { int s = cr; // 将进位赋给当前和 if (i < a.size()) s += a[i]; // 如果a中有当前位,累加到s if (i < b.size()) s += b[i]; // 如果b中有当前位,累加到s c.push_back(s % 10); // 当前位结果是s的个位 cr = s / 10; // 更新进位,s除以10的商 i++; // 处理下一个位 } return c; // 返回加法结果 } // 函数用于高精度乘法,接受一个大整数a(以vector形式表示)和一个整数k,返回a乘k的结果 vector<int> mul(vector<int> a, int k) { vector<int> c; // 存储乘法结果 int cr = 0; // 进位 for (int i = 0; i < a.size(); ++i) { int t = a[i] * k + cr; // 计算当前位的乘积,加上进位 c.push_back(t % 10); // 当前位结果是t的个位 cr = t / 10; // 更新进位,t除以10的商 } // 如果进位不为0,继续处理进位 while (cr) { c.push_back(cr % 10); // 当前进位的个位 cr /= 10; // 更新进位 } return c; // 返回乘法结果 } int main() { int n; cin >> n; // 输入n,表示计算1! + 2! + 3! + ... + n! vector<int> sum, fc(1, 1); // sum用于存储阶乘和,fc用于存储当前的阶乘(初始化为1) // 计算1! + 2! + 3! + ... + n!,初始sum为0 sum = add(sum, fc); // 先将1!加到sum中 for (int k = 2; k <= n; ++k) { fc = mul(fc, k); // 计算当前阶乘k! sum = add(sum, fc); // 将当前阶乘加到sum中 } // 输出最终结果,注意是从高位到低位输出 for (int i = sum.size() - 1; i >= 0; --i) cout << sum[i]; // 输出每一位 cout << endl; // 输出换行符 return 0; // 程序结束 }
- 1
信息
- ID
- 653
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 6
- 已通过
- 4
- 上传者