大整数乘法

大整数乘法,模拟草稿手算过程,注意做好进位处理即可。

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

string mul(string a, string b) {
    if (a.size() < b.size()) swap(a, b);
    reverse(a.begin(), a.end());
    reverse(b.begin(), b.end());
    string res;
    for (size_t i = 0; i < b.size(); i++) {
        int carryIn = 0;
        for (size_t j = 0; j < a.size(); j++) {
            if (i+j < res.size()) {
                char ck = (b[i] - '0') * (a[j] - '0')
                        + (res[i+j] - '0') + carryIn;
                carryIn = ck / 10;
                res[i+j] = ck % 10 + '0'; // 到这里自然就知道上面的if条件了
            } else {
                char ck = (b[i] - '0') * (a[j] - '0')
                        + carryIn;
                carryIn = ck / 10;
                res.push_back(ck % 10 + '0');
            }
        }
        while (carryIn) {
            res.push_back(carryIn % 10 + '0');
            carryIn /= 10;
        }
    }
    reverse(res.begin(), res.end());
    return res;
}

int main() {
    string a, b;
    cin >> a >> b;
    cout << mul(a, b) << endl;
    return 0;
}
posted @ 2021-08-30 19:55  与MPI做斗争  阅读(43)  评论(0编辑  收藏  举报