793. 高精度乘法

105 阅读1分钟

793. 高精度乘法 - AcWing题库

Question

Content

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

输入格式

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

输出格式

共一行,包含 A * B 的值。

数据范围

1≤ A的长度 ≤100000, 0≤ B ≤10000

输入样例:

2
3

输出样例:

6

Solution

Java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
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 = multiplication(a, b);

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

        bufferedReader.close();
    }

    private static List<Integer> multiplication(List<Integer> a, Integer b) {
        List<Integer> ans = new ArrayList<>();

        if (b == 0) {
            ans.add(0);
            return ans;
        }

        int t = 0;

        for (Integer integer : a) {
            t += integer * b;
            ans.add(t % 10);
            t /= 10;
        }

        if (t != 0) {
            ans.add(t);
        }

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

        return ans;
    }
    
}