基本思路:將輸入的兩個大數以字符串的形式存儲,然后轉化成整型數組存儲,通過整型數組進行乘法運算(采用分治的思想)
即乘法分配律,如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); } }