高精度乘法

10 分钟

竖式乘法:a 的第 位乘 b 的第 位,得数落在结果的第 位上(个位下标是 0,位权相乘就是下标相加)。先把所有乘积累加到对应位置,最后再统一处理进位。

long long c[2005] = {0};
for (int i = 0; i < lenA; i++)
    for (int j = 0; j < lenB; j++)
        c[i + j] += a[i] * b[j];   // 先只累加,不进位
int len = lenA + lenB;
for (int i = 0; i < len; i++) {    // 最后统一进位
    c[i + 1] += c[i] / 10;
    c[i] %= 10;
}
while (len > 1 && c[len - 1] == 0) len--;

复杂度 ,两数各 位,结果最多 位。

考试常见坑:(1)c 数组要清零、且开到 ;(2)累加阶段某位的值可能远超 9(很多乘积叠在一起),所以进位必须用 /10%10,不能简单减 10;(3)中间累加值较大,clong long 更稳;(4)任一乘数是 0 时结果是 0,去零要保留一位。

小纸条

a 的第 i 位乘 b 的第 j 位,结果该加到第几位?

登录 后可看答案