高精度加法

两数相加,保证为正整数。一定会超过long long。所以有如下程序。。。同时这也是某次面试的错。。。

思路如下:

两个字符串去做反转,然后从0为开始相加,遇到满十做进位记号。

记得为了最后有可能的进位,要将数组多申请一个位置(这里是个坑)

最后再反转数组然后转换成字符串返回即可

public static String Bigcamladd(String a, String b) {
        char[] A = new StringBuffer(a).reverse().toString().toCharArray();
        char[] B = new StringBuffer(b).reverse().toString().toCharArray();
        boolean isOver10 = false;
        int resultLength = A.length > B.length ? A.length : B.length;
        int shortOne = A.length < B.length ? A.length : B.length;
        int[] result = new int[resultLength + 1];
        for (int i = 0; i <= resultLength - 1; ) {
            if (i < shortOne) {
                int tmp = A[i] + B[i] - 2 * '0';
                if (isOver10) tmp += 1;
                if (tmp >= 10) isOver10 = true;
                else isOver10 = false;
                result[i] = tmp % 10;
            } else {
                result[i] = A.length > B.length ? A[i] - '0' : B[i] - '0';
            }
            i++;
        }
        if (isOver10) result[resultLength] = 1;
        StringBuffer buffer = new StringBuffer();
        for (int i : result) {
            buffer.append(i);
        }
        return buffer.reverse().toString();

    }

不得不再感叹一次,Java的String类真特么的好用阿。。。。