Python nb(陈年旧题)

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秒杀一切高精度的题目
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇