- C++
(自留)计算最后n位的高精X高精函数
- 2025-2-5 18:03:11 @
高精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 条评论
目前还没有评论...