分治回溯-----分治的應用之大整數乘法問題

在這裏插入圖片描述
在這裏插入圖片描述

public class BigIntegerMultiplication {
    public static void main(String[] args) {
        long x=12345678;
        long y=12345678;
       // System.out.println(x*y);
        long product=multi(x,y,4);
        System.out.println(product);
    }

    private static long multi(long x, long y, int n) {   //表示的深度
        if(x==0||y==0){
            return 0;
        }
        if (n==1){
            return x*y;
        }
        long A=(long) (x/Math.pow(10,n/2));
        long B=(long) (x-A*Math.pow(10,n/2));
        long C=(long) (y/Math.pow(10,n/2));
        long D=(long) (y-C*Math.pow(10,n/2));
        long E=multi(A,C,n/2);
        long F=multi(B,D,n/2);
        long G=multi(A+B,C+B,n/2);
        return (long) (E*Math.pow(10,n)+(G-E-F)*Math.pow(10,n/2)+F);
    }
}

執行結果

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