JAVA大數據運算系列之大整數相乘

最近在準備面試,遇到很多大數據運算相關的面試題,這裏做個記錄。                    

一、兩個非負整數相乘

解題思路借鑑於:qwurey-Java實現大整數相乘

import java.util.Scanner;
public class BigNumMultiply {
    static int N = 1000;
    static int a[] = new int[N];
    static int b[] = new int[N];
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s1 = scanner.nextLine().trim();
        String s2 = scanner.nextLine().trim();
        int len1 = s1.length();
        int len2 = s2.length();
        getDigit(s1, a);
        getDigit(s2, b);
        doOutput(doMultiply(a, len1, b, len2));

    }

    public static void doOutput(int []arr) {
        boolean findFirstNum =  false;
        for (int i = arr.length - 1; i >= 0; i--) {
            if (!findFirstNum && arr[i] == 0) {
                continue;
            }
            findFirstNum = true;
            System.out.print(arr[i]);
        }
        System.out.println("");
    }

    public static int[] doMultiply(int []a, int len1, int []b, int len2) {
        int res[] = new int[2 * N + 1];
        for (int i = 0; i < len1; i++) {
            for (int j = 0; j < len2; j++) {
                int temp = res[j + i] + a[i] * b[j];
                int n = temp % 10;
                int m = temp / 10;
                res[i + j] = n;
                res[i + j + 1] += m;
            }
        }
        return res;
    }

    public static void getDigit(String s, int[] a) {
        int len = s.length();
        for (int i = 0; i < len; i++) {
            a[len - 1 - i] = s.charAt(i) - '0';
        }
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章