高精度乘法

2021-10-23 常用算法 高精度

# 一、算法思想

使用数组来存储大整数,为了方便处理进位,可以按照由低位到高位的顺序存储。

注意

该模板仅考虑高精度与低精度相乘的情况。

定义高精度整数 AA,低精度整数 bb,以及低位对当前位的进位 tt

由于 bb 的位数少,因此可以将 bb 看作一个整体,即:转换成 b×Ab \times A 后再模拟手算乘法。

# 二、算法模板

C++

// C = A * b, A >= 0, b >= 0
vector<int> mul(vector<int> &A, int b)
{
    vector<int> C;
    
    int t = 0;
    for (int i = 0; i < A.size() || t; i++) {
        if (i < A.size()) t += b * A[i];
        C.push_back(t % 10);
        t /= 10;
    }
    
    // 去除前导 0
    while (C.size() > 1 && C.back() == 0) C.pop_back();
    
    return C;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

Go

func mul(A []int, b int) (C []int) {
    t := 0
    for i := 0; i < len(A) || t > 0; i++ {
        if i < len(A) {
            t += A[i] * b
        }
        C = append(C, t%10)
        t /= 10
    }
    // 去除前导 0
    for len(C) > 1 && C[len(C)-1] == 0 {
        C = C[:len(C)-1]
    }
    return
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 三、代码实战

# AcWing 0793


题目:高精度乘法

给定两个非负整数(不含前导 00AABB,请你计算 A×BA \times B 的值。

输入格式

共两行,第一行包含整数 AA,第二行包含整数 BB

输出格式

共一行,包含 A×BA \times B 的值。

数据范围

1A 的长度1051\le \text{A 的长度} \le 10^5
0B1040\le \text{B} \le 10^4

输入样例:

2

3

输出样例:

6

解答代码:

    Last Updated: 2023-01-28 4:31:25