高精度除法

80 阅读1分钟

模板

  • 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());
    while (C.size() > 1 && C.back() == 0) C.pop_back();
    return C;
}
  • Java
public static Map<List<Integer>, int> div(List<Integer> num1, int num2) {
    Map<List<Integer>, Integer> res = new HashMap<>();
    List<Integer> num3 = new ArrayList<>();
    int t = 0;
    for (int i = num1.size() - 1; i >= 0; i--) {
        t = t * 10 + num1.get(i);
        num3.add(t / num2);
        t %= num2;
    }
    Collections.reverse(num3);
    while (num3.size() > 1 && num3.get(num3.size() - 1) == 0) {
        num3.remove(num3.size() - 1);
    }
    res.put(num3, t);
    return res;
}

练习

04 高精度除法

  • 题目

Snipaste_2023-02-23_19-27-52.png

  • 题解
import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        char[] chars1 = br.readLine().toCharArray();
        List<Integer> num1 = new ArrayList<>();
        for (int i = chars1.length - 1; i >= 0; i--) {
            num1.add(chars1[i] - '0');
        }
        int num2 = Integer.parseInt(br.readLine());
        br.close();
        Map<List<Integer>, Integer> res = div(num1, num2);
        res.forEach((key, value) -> {
                    for (int i = key.size() - 1; i >= 0; i--) {
                        System.out.print(key.get(i));
                    }
                    System.out.println();
                    System.out.print(value);
                }
        );
    }

    public static Map<List<Integer>, Integer> div(List<Integer> num1, int num2) {
        Map<List<Integer>, Integer> res = new HashMap<>();
        List<Integer> num3 = new ArrayList<>();
        int t = 0;
        for (int i = num1.size() - 1; i >= 0; i--) {
            t = t * 10 + num1.get(i);
            num3.add(t / num2);
            t %= num2;
        }
        Collections.reverse(num3);
        while (num3.size() > 1 && num3.get(num3.size() - 1) == 0) {
            num3.remove(num3.size() - 1);
        }
        res.put(num3, t);
        return res;
    }
}
import java.io.*;
import java.math.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BigInteger num1 = new BigInteger(br.readLine());
        String num2 = br.readLine();
        br.close();
        BigInteger[] res = num1.divideAndRemainder(new BigInteger(num2));
        System.out.println(res[0]);
        System.out.println(res[1]);
    }
}