1. 程式人生 > >JAVA 兩個大字串數字相加

JAVA 兩個大字串數字相加

在平常的業務中也許會有很大的數字無法使用int或者long來儲存了,那麼只能儲存成string型別,當需要兩個這樣的數字相加的時候,怎麼辦呢?

字串假如都是數字,不包含特殊符號或字母

整體步驟:

  1. 將兩個字串長度補全,補成一致長度,長度短的左邊補0;
  2. 定義一個新的整形陣列,長度為字串的長度+1,因為結果的長度可能超出原字串的長度(整形陣列值預設為0);
  3. 倒敘迴圈相加,將結果%10的餘位放在低位,結果的/10的結果放在高位;最終合併結果返回。
public String bigNumberPlus(String a, String b) {
    int lenA = a.length();
    int lenB = b.length();
    if(lenA > lenB) {
        b = StringUtils.leftPad(b, lenA, "0");
    } else {
        a = StringUtils.leftPad(a, lenB, "0");
    }

    int[] arrC = new int[a.length() + 1];

    for(int i = a.length()-1; i>=0; i--) {
        int ai = Integer.parseInt(a.charAt(i) + "" );
        int bi = Integer.parseInt(b.charAt(i) + "" );
        int ci = arrC[i+1];
        int t = ai + bi + ci;
        arrC[i+1] = t%10;
        arrC[i] = t/10;
    }

    StringBuffer res = new StringBuffer();
    for(int i = 0; i<arrC.length; i++) {
        if(i==0 && arrC[i]==0) continue;
        res.append(arrC[i]);
    }
    return res.toString();
}

方法整體只迴圈一次,效率還可以,大家還有什麼好方法,可以留言討論!

如果是小數的話,有兩種思路:

  1. 補全長度的時候,需要兩邊都補全,小數點左邊的在左邊補全0,小數點右邊在右邊補全0,然後標記小數點所在的位置,剔除小數點,計算完成後,再在固定位置加入小數點即可。
  2. 分開計算:先計算小數點右邊的小數部分,計算時需要右邊補全;然後計算小數點左邊部分,計算時需要左邊補全,當右邊計算結果大於1的時候,需要左邊按照3個字串計算。