返回首页 C++ 模板

高精度乘法模板

大数乘以普通整数——模拟竖式乘法

高精度 乘法 大数 GESP5
#include <bits/stdc++.h>
using namespace std;

// 高精度 × 低精度
vector<int> mul(vector<int> &A, int b) {
    vector<int> C;
    int carry = 0;
    for (int i = 0; i < A.size() || carry; i++) {
        if (i < A.size()) carry += A[i] * b;
        C.push_back(carry % 10);
        carry /= 10;
    }
    while (C.size() > 1 && C.back() == 0) C.pop_back();
    return C;
}

// 高精度 × 高精度
vector<int> mul2(vector<int> &A, vector<int> &B) {
    vector<int> C(A.size() + B.size(), 0);
    for (int i = 0; i < A.size(); i++)
        for (int j = 0; j < B.size(); j++)
            C[i+j] += A[i] * B[j];
    int carry = 0;
    for (int i = 0; i < C.size(); i++) {
        carry += C[i];
        C[i] = carry % 10;
        carry /= 10;
    }
    while (C.size() > 1 && C.back() == 0) C.pop_back();
    return C;
}

int main() {
    string a; int b;
    cin >> a >> b;
    vector<int> A;
    for (int i = a.size()-1; i >= 0; i--) A.push_back(a[i]-'0');
    auto C = mul(A, b);
    for (int i = C.size()-1; i >= 0; i--) cout << C[i];
    cout << endl;
    return 0;
}

📖 要点说明

⚠️ 常见错误