Java實現大數乘法運算


基本思路:將輸入的兩個大數以字符串的形式存儲,然后轉化成整型數組存儲,通過整型數組進行乘法運算(采用分治的思想)

即乘法分配律,如AB*CD=AC(AD+BC)BD,將兩個數組逐位相乘的結果對位存放在新的數組里,再對新數組進行進位判定,進位結束后將新數組轉化成字符串輸出。

實現代碼如下:

import java.util.Scanner;

//創建類largenumberOperationMultiply
public class largenumberOperationMultiply {

    //定義方法multiply的功能
    public String multiply(String str1,String str2){
        int[] num1 = new int[str1.length()];
        int[] num2 = new int[str2.length()];
        int[] result = new int[str1.length() + str2.length()];

        //將兩個字符串轉成整型數組,順序轉換,數組下標越小,數字對應的位數越高
        for (int i = 0;i < str1.length(); i++){
            num1[i] = Integer.parseInt(str1.substring(i,i+1));
        }
        for (int i = 0;i < str2.length(); i++){
            num2[i] = Integer.parseInt(str2.substring(i,i+1));
        }

        //兩大數相乘
        for (int a = 0;a < str1.length(); a++){
            for (int b = 0;b < str2.length(); b++){
                result[a+b] += num1[a]*num2[b];
            }
        }

        ////判斷是否需要進位,滿10進1,因為存儲順序與位數高低相反,所以采用逆序進位
        int temp;
        for (int k = result.length-1; k > 0; k--){
                temp=result[k]/10;  //數組下標大的向數組下標小的進位
                result[k-1] += temp;
                result[k] = result[k]%10;
            }

        //將結果數組逆序轉化為字符串
        String resultstr = "";
        for (int i = 0; i < result.length-1; i++){
            resultstr += "" + result[i];
        }

        return resultstr;
    }

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("請輸入第一個數:");
        String str1 = sc.next();
        System.out.println("請輸入第二個數:");
        String str2 = sc.next();
        largenumberOperationMultiply bn = new largenumberOperationMultiply();
        //創建類largenumberOperationMultiply的對象bn
        String output = bn.multiply(str1,str2);
        //bn對象調用multiply方法對str1和str2進行操作
        System.out.println(str1+"與"+str2+"的積為="+output);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM