提交时间:2026-03-27 20:32:40

运行 ID: 86282

#include <iostream> #include <vector> using namespace std; int main() { int n; cin >> n; int fac[100] = {0}; // 存储当前阶乘的每一位 int sum[100] = {0}; // 存储总和的每一位 fac[0] = 1; // 1! 的初始值 int len = 1; // 当前数字的长度 for (int i = 1; i <= n; i++) { // 1. 计算 i! (在前一个阶乘基础上乘以 i) int carry = 0; // 乘法进位 for (int j = 0; j < 100; j++) { int temp = fac[j] * i + carry; fac[j] = temp % 10; carry = temp / 10; } // 2. 将当前的 i! 加到 sum 中 int ad_carry = 0; // 加法进位 for (int j = 0; j < 100; j++) { int temp = sum[j] + fac[j] + ad_carry; sum[j] = temp % 10; ad_carry = temp / 10; } } // 3. 倒序输出(找到最高位开始打印) int pos = 99; while (pos > 0 && sum[pos] == 0) pos--; // 跳过前导0 for (int i = pos; i >= 0; i--) { cout << sum[i]; } cout << endl; return 0; }