高精度乘法
睡不醒的鲤鱼 2021-10-23 常用算法 高精度
# 一、算法思想
使用数组来存储大整数,为了方便处理进位,可以按照由低位到高位的顺序存储。
注意
该模板仅考虑高精度与低精度相乘的情况。
定义高精度整数 ,低精度整数 ,以及低位对当前位的进位 。
由于 的位数少,因此可以将 看作一个整体,即:转换成 后再模拟手算乘法。
# 二、算法模板
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
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 三、代码实战
# AcWing 0793
题目:高精度乘法
给定两个非负整数(不含前导 ) 和 ,请你计算 的值。
输入格式
共两行,第一行包含整数 ,第二行包含整数 。
输出格式
共一行,包含 的值。
数据范围
输入样例:
2
3
输出样例:
6
解答代码: