6
0
0

Python nb(陈年旧题)

2026-02-16
2026-08-13
文章摘要
|

P1009 [NOIP 1998 普及组] 阶乘之和

时间限制: 1.00s    内存限制: 125.00MB

题目描述

用高精度计算出 S=1!+2!+3!+⋯+n!(n≤50)。

其中 ! 表示阶乘,定义为 n!=n×(n−1)×(n−2)×⋯×1。例如,5!=5×4×3×2×1=120。

输入格式

一个正整数 n

输出格式

一个正整数 S,表示计算结果。

这是C++代码:

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

// 极简函数1:超大数字符串 + 1  (适配你的公式里的 total+1)
string strAddOne(string s) {
    reverse(s.begin(), s.end()); // 反转,从个位开始算,方便进位
    int carry = 1; // 要加的1,初始进位就是1
    for(int i=0; i<s.size() && carry; i++) {
        int num = s[i]-'0' + carry;
        s[i] = num%10 + '0';
        carry = num/10;
    }
    if(carry) s += '1'; // 最后还有进位,补1
    reverse(s.begin(), s.end()); // 反转回来
    return s;
}

// 极简函数2:超大数字符串 × 普通整数  (适配你的公式里的 *i)
string strMulInt(string s, int n) {
    reverse(s.begin(), s.end());
    string res;
    int carry = 0;
    for(int i=0; i<s.size(); i++) {
        int num = (s[i]-'0')*n + carry;
        res += num%10 + '0';
        carry = num/10;
    }
    while(carry) { // 处理剩余进位
        res += carry%10 + '0';
        carry /= 10;
    }
    reverse(res.begin(), res.end());
    return res;
}

int main() {
    int num;
    cin >> num;
    string total = to_string(num); // 字符串存初始值,替代__int128
    // ===== 你的原循环+原公式,一字未改!=====
    for (int i = num - 1; i >= 1; i--) {
        total = strMulInt( strAddOne(total) , i );
    }
    cout << total << endl; // 直接cout输出字符串,无需额外打印函数
    return 0;
}

这是Python代码

n = int(input())
total = n
for i in range(1,n):
    total = (total+1)*(n-i)
print(total)
Python秒杀一切高精度的题目

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!

评论