高精度除法
睡不醒的鲤鱼 2021-10-23 常用算法 高精度
# 一、算法思想
使用数组来存储大整数,需要说明的是,如果题目中只有除法运算,那么按照由高位到低位存储会更方便。但为了与其他运算统一处理,这里仍然选择由低位到高位的顺序存储。
注意
该模板仅考虑高精度除以低精度的情况。
# 二、算法模板
C++
// A / b = C ... r, A >= 0, b > 0
vector<int> div(vector<int> &A, int b, int &r)
{
vector<int> C;
r = 0;
for (int i = A.size() - 1; i >= 0; i--) {
r = r * 10 + A[i];
C.push_back(r / b);
r %= b;
}
reverse(C.begin(), C.end());
// 去除前导 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
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Go
func div(A []int, b int) (C []int, r int) {
for i := len(A) - 1; i >= 0; i-- {
r = r*10 + A[i]
C = append(C, r/b)
r %= b
}
// reverse
for i, j := 0, len(C)-1; i < j; i, j = i+1, j-1 {
C[i], C[j] = C[j], C[i]
}
// 去除前导 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
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 三、代码实战
# AcWing 0794
题目:高精度除法
给定两个非负整数(不含前导 ) 和 ,请你计算 的商和余数。
输入格式
共两行,第一行包含整数 ,第二行包含整数 。
输出格式
共两行,第一行输出所求的商,第二行输出所求余数。
数据范围
输入样例:
7
2
输出样例:
3
1
解答代码: