JAVA實現兩個大數相加
阿新 • • 發佈:2019-01-05
主要的思想是:把兩個數存在String中了,然後將每個數字取出,放到陣列,由最末位開始計算,算加法,判斷是否進位,進位則前位+1,若超過長度,則copy到新的陣列。
程式碼如下:
public class BigIntAdd { private int[] array;//宣告一個數組 //計算大數相加的函式 public static String bigAdd(BigIntAdd fisrtNum, BigIntAdd secondNum) { String result = ""; boolean falg = false;//判斷陣列是否越界的標誌 int[] arrayOne; int[] arrayTwo; int[] arrayThree = null; //把較長的字串放到arrayOne陣列中,因為要把計算結果放到arrayOne陣列中 if (fisrtNum.instance().length >= secondNum.instance().length) { arrayOne = fisrtNum.instance(); arrayTwo = secondNum.instance(); } else { arrayOne = secondNum.instance(); arrayTwo = fisrtNum.instance(); } for (int i = 0; i < arrayTwo.length; i++) { if (arrayOne[i] + arrayTwo[i] < 10) {//不需要進位時 arrayOne[i] = arrayOne[i] + arrayTwo[i]; } else if (arrayOne[i] + arrayTwo[i] >= 10) {//需要進位時 arrayOne[i] = arrayOne[i] + arrayTwo[i] - 10; if ((i + 1) < arrayOne.length) { arrayOne[i + 1] = arrayOne[i + 1] + 1;//下一位的值加1 } else { //當arrayOne的長度不夠時要把其複製到arrayThree中 falg = true; arrayThree = new int[arrayOne.length + 1]; System.arraycopy(arrayOne, 0, arrayThree, 0,arrayOne.length); arrayThree[arrayOne.length] = 1;//把arrayThree最高位賦值1,等價於進位的1 } } } //把陣列arrayThree中的元素全部的拼接為字串 if (falg) { for (int i : arrayThree) { result += i; } } else { for (int i : arrayOne) { result += i; } } //把結果反轉返回 return new StringBuffer(result).reverse().toString(); } //初始化陣列方法 private int[] instance() { return array; } //初始化構造方法 public BigIntAdd(String num) { StringBuffer sb = new StringBuffer(num); String string = sb.reverse().toString();//實現字串反轉,便於計算 array = new int[string.length()]; //把字串轉化為陣列 for (int i = 0; i < string.length(); i++) { array[i] = Integer.valueOf(string.substring(i, i + 1)); } } public static void main(String [] args){ String result=BigIntAdd.bigAdd(new BigIntAdd("5211111111"), new BigIntAdd("4099999999")); System.out.println(result); } }