高精度乘法

34 阅读1分钟

模板

  • C++
// C = A * b, A >= 0, b >= 0
vector<int> mul(vector<int> &A, int b)
{
    vector<int> C;

    int t = 0;
    for (int i = 0; i < A.size() || t; i ++ )
    {
        if (i < A.size()) t += A[i] * b;
        C.push_back(t % 10);
        t /= 10;
    }

    while (C.size() > 1 && C.back() == 0) C.pop_back();

    return C;
}
  • Java
public static List<Integer> mul(List<Integer> num1, int num2) {
    List<Integer> num3 = new ArrayList<>();
    int t = 0;
    for (int i = 0; i < num1.size() || t != 0; i++) {
        if (i < num1.size()) {
            t += num1.get(i) * num2;
        }
        num3.add(t % 10);
        t /= 10;
    }
    while (num3.size() > 1 && num3.get(num3.size() - 1) == 0) {
        num3.remove(num3.size() - 1);
    }
    return num3;
}

练习

03 高精度乘法

  • 题目

Snipaste_2023-02-22_21-29-11.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());
        List<Integer> num3 = mul(num1, num2);
        for (int i = num3.size() - 1; i >= 0; i--) {
            System.out.print(num3.get(i));
        }
    }

    public static List<Integer> mul(List<Integer> num1, int num2) {
        List<Integer> num3 = new ArrayList<>();
        int t = 0;
        for (int i = 0; i < num1.size() || t != 0; i++) {
            if (i < num1.size()) {
                t += num1.get(i) * num2;
            }
            num3.add(t % 10);
            t /= 10;
        }
        while (num3.size() > 1 && num3.get(num3.size() - 1) == 0) {
            num3.remove(num3.size() - 1);
        }
        return num3;
    }
}
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();
        System.out.println(num1.multiply(new BigInteger(num2)));
    }
}