794. 高精度除法

90 阅读1分钟

794. 高精度除法 - AcWing题库

Question

Content

给定两个非负整数(不含前导 0) A,B,请你计算 A/B 的商和余数。

输入格式

共两行,第一行包含整数 A,第二行包含整数 B。

输出格式

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

数据范围

1≤ A 的长度 ≤100000, 1≤ B ≤10000, B 一定不为 0

输入样例:

7
2

输出样例:

3
1

Solution

Java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String s = bufferedReader.readLine();

        List<Integer> a = new ArrayList<>();
        for (int i = s.length() - 1; i >= 0; i--) {
            a.add(Character.getNumericValue(s.charAt(i)));
        }

        Integer b = Integer.parseInt(bufferedReader.readLine());

        List<Integer> ans = division(a, b);

        for (int i = ans.size() - 2; i >= 0; i--) {
            System.out.print(ans.get(i));
        }

        System.out.println();

        System.out.println(ans.get(ans.size() - 1));

        bufferedReader.close();
    }

    private static List<Integer> division(List<Integer> a, Integer b) {
        int t = 0;

        List<Integer> ans = new ArrayList<>();

        for (int i = a.size() - 1; i >= 0; i--) {
            t = t * 10 + a.get(i);
            ans.add(t / b);
            t %= b;
        }

        Collections.reverse(ans);

        while (ans.size() > 1 && ans.get(ans.size() - 1) == 0) {
            ans.remove(ans.size() - 1);
        }

        ans.add(t);

        return ans;
    }

}