文章

119

粉丝

68

获赞

90

访问

19.9k

头像
n的阶乘2.0 题解:dp结合大数乘
P1174 清华大学上机题
发布于2025年2月16日 17:07
阅读数 48

#include <bits/stdc++.h>

using namespace std;

string multiplyBigNumber(const string & num, int multiplier) {
    if (multiplier == 0) {
        return "0";
    }

    string result;
    int carry = 0;

    // 从字符串的末尾开始,逐位相乘
    for (int i = num.length() - 1; i >= 0; --i) {
        int digit = num[i] - '0';
        int product = digit * multiplier + carry;
        carry = product / 10;
        result.push_back((product % 10) + '0');
    }

    // 处理最后的进位
    while (carry != 0) {
        result.push_back((carry % 10) + '0');
        carry /= 10;
    }

    // 反转结果字符串,因为我们是从最低位开始计算的
    reverse(result.begin(), result.end());

    return result;
}

int main() {
    vector < string > a(1001);
    a[0] = "1", a[1] = "1";
    for (int i = 2; i <= 1000; i++) {
        a[i]=multiplyBigNumber(a[i-1],i);
    }
    int n;
    while (cin >> n) {
        cout<<a[n]<<endl;
    }
}

大数乘一般数的情况是非常简单的,然后我们在1000范围内进...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发