高精度除法

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

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

# 三、代码实战

# AcWing 0794


题目:高精度除法

给定两个非负整数(不含前导 00AABB,请你计算 A÷BA \div B 的商和余数。

输入格式

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

输出格式

共两行,第一行输出所求的商,第二行输出所求余数。

数据范围

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

输入样例:

7

2

输出样例:

3

1

解答代码:

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