java实现两个最大整数相加_JAVA-实现两个超大整数相加
思路:
第一步,把整數倒序存儲,整數的個位存于數組0下標位置,最高位存于數組長度-1下標位置。之所以倒序存儲,更加符合我們從左到右訪問數組的習慣。
我們以 426709752318 + 95481253129 為例,來看看大整數相加的詳細步驟:
第二步,創建結果數組,結果數組的最大長度是較大整數的位數+1,原因很明顯。
第三步,遍歷兩個數組,從左到右按照對應下標把元素兩兩相加,就像小學生計算豎式一樣。
例子中,最先相加的是數組A的第1個元素8和數組B的第1個元素9,結果是7,進位1。把7填充到Result數組的對應下標,進位的1填充到下一個位置:
第二組相加的是數組A的第2個元素1和數組B的第2個元素2,結果是3,再加上剛才的進位1,把4填充到Result數組的對應下標:
第三組相加的是數組A的第3個元素3和數組B的第3個元素1,結果是4,把4填充到Result數組的對應下標:
第四組相加的是數組A的第4個元素2和數組B的第4個元素3,結果是5,把5填充到Result數組的對應下標:
以此類推......一直把數組的所有元素都相加完畢:
第四步,把Result數組的全部元素再次逆序,去掉首位的,就是最終結果:
代碼實現:
@Test
public void testBig() {
System.out.println(bigAdd("123456789", "9999999999999999999999999"));
}
public static String bigAdd(String a, String b) {
char[] charsA = new StringBuilder(a).reverse().toString().toCharArray();
char[] charsB = new StringBuilder(b).reverse().toString().toCharArray();
int maxLength = Math.max(charsA.length, charsB.length);
int[] result = new int[maxLength + 1];
int temp = 0;
for (int i = 0; i <= maxLength; i++) {
temp = result[i];
if (i < charsA.length) {
temp += charsA[i] - '0';
}
if (i < charsB.length) {
temp += charsB[i] - '0';
}
if (temp >= 10) {
temp -= 10;
result[i + 1] = 1;
}
result[i] = temp;
}
StringBuilder sb = new StringBuilder();
boolean flag = true;
for (int i = maxLength; i >= 0; i--) {
if (result[i] == 0 && flag) {
continue;
}
flag = false;
sb.append(result[i]);
}
return sb.toString();
}
總結
以上是生活随笔為你收集整理的java实现两个最大整数相加_JAVA-实现两个超大整数相加的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java静态分派_Java基础——重载、
- 下一篇: mllib java怎么调用_如何准备m