算法 | 高精度乘法 A * B Problem

#include <iostream>
#include <vector>
using namespace std;

// 字符串转逆序数字数组
vector<int> str2num(string s) {
    vector<int> num;
    for (int i = s.size() - 1; i >= 0; i--) {
        num.push_back(s[i] - '0');
    }
    return num;
}

// 输出数字数组
void output(const vector<int>& num) {
    for (int i = num.size() - 1; i >= 0; i--) {
        cout << num[i];
    }
    cout << endl;
}

// 高精度乘法
vector<int> multiply(const vector<int>& A, const vector<int>& B) {
    vector<int> C(A.size() + B.size(), 0); // 初始化结果数组,长度为A和B长度之和
    for (int i = 0; i < A.size(); i++) {
        for (int j = 0; j < B.size(); j++) {
            C[i + j] += A[i] * B[j]; // 计算每一位的乘积
            C[i + j + 1] += C[i + j] / 10; // 处理进位
            C[i + j] %= 10; // 保留当前位的个位数
        }
    }
    while (C.size() > 1 && C.back() == 0) {
        C.pop_back(); // 去除结果中的前导零
    }
    return C;
}

int main() {
    string a, b;
    cin >> a >> b;
    vector<int> A = str2num(a), B = str2num(b);
    vector<int> result = multiply(A, B);
    output(result);
    return 0;
}

posted @ 2025-04-21 18:37  三小花荷包蛋  阅读(7)  评论(0)    收藏  举报