高精X高精

vector<int> highPrecisionMultiply(const vector<int> &a, const vector<int> &b) {
    // 结果的长度最大为 a.size() + b.size()
    vector<int> result(a.size() + b.size(), 0);

    // 高精度乘法核心逻辑
    for (size_t i = 0; i < a.size(); i++) {
        for (size_t j = 0; j < b.size(); j++) {
            result[i + j] += a[i] * b[j]; // 当前位累加乘积
            if (result[i + j] >= 10) {   // 处理进位
                result[i + j + 1] += result[i + j] / 10;
                result[i + j] %= 10;
            }
        }
    }

    // 去掉前导零
    while (result.size() > 1 && result.back() == 0) {
        result.pop_back();
    }

    return result;
}****

高精x高精(只要后limit位)

vector<int> highPrecisionMultiply(const vector<int> &a, const vector<int> &b, int limit = 500) {
    // 结果长度最多限制为 limit + 1,避免冗余计算
    vector<int> result(limit + 1, 0);

    // 高精度乘法核心逻辑
    for (size_t i = 0; i < a.size(); i++) {
        for (size_t j = 0; j < b.size(); j++) {
            if (i + j >= limit + 1) break; // 超过限制的位数就跳过
            result[i + j] += a[i] * b[j];  // 当前位累加乘积
            if (result[i + j] >= 10) {    // 处理进位
                if (i + j + 1 <= limit)   // 只处理在范围内的进位
                    result[i + j + 1] += result[i + j] / 10;
                result[i + j] %= 10;
            }
        }
    }

    // 去掉可能多余的前导零,但最多保留 limit 位
    while (result.size() > 1 && result.back() == 0) {
        result.pop_back();
    }

    return result;
}

0 条评论

目前还没有评论...