1. 程式人生 > >兩個非常大的數字(超過Long最大能表達的範圍)的加法運算(不能使用JAVA現成的類)

兩個非常大的數字(超過Long最大能表達的範圍)的加法運算(不能使用JAVA現成的類)

思路:

        大數用String類來儲存。大數的每個位分別相加,保留每個位的進位給下一位,最後結果依然儲存在String類中。

public class BigNumber {

    public String add(String a, String b) {

        String ret = "";
        int lenA = a.length();
        int lenB = b.length();
        int maxLen = lenA > lenB ? lenA : lenB;
        int minLen = lenA < lenB ? lenA : lenB;
        StringBuilder s = new StringBuilder();
        //要保證兩個數位數相同,位數少的前面補0
        for (int i = 0; i < maxLen - minLen; i++) {
            s.append(0);
        }
        if (minLen == lenA) {
            s.append(a);
        } else {
            s.append(b);
        }

        s = new StringBuilder();
        int tempA, tempB, result;
        int sc = 0;//進位
        for (int i = maxLen - 1; i >= 0; i--) {
            tempA = Integer.valueOf(a.charAt(i));
            tempB = Integer.valueOf(b.charAt(i));
            result = tempA + tempB + sc;
            sc = result / 10;
            result = result % 10;
            s.append(result);
        }
        //如果加到最高為仍有進位,那麼也要加上去
        if (sc == 1) {
            s.append(1);
        }
        //因為是從個位依次相加的,所以結果要倒過來
        ret = s.reverse().toString();

        return ret;
    }

}