对非常大的两个数字求和——数字字符串求和

对于大到会溢出任何数据类型的整数进行求和:
思路:将数字一字符串的形式保存;逐位进行求和;
细节:注意进位;

public class BigIntegerTest {

    public static int[] add(String a, String b) {
        String[] strs = prepare(a, b);
        a = strs[0];
        b = strs[1];
        System.out.println("\t" + a);
        System.out.println("+\t" + b);
        System.out.println("------------------------");

        int n = a.length();
        int[] res = new int[n + 1];//可能产生进位
        int num1 = 0, num2 = 0, num = 0;

        //从最低位开始逐位相加
        for (int i = n - 1; i >= 0; i--) {
            num1 = Integer.parseInt(a.substring(i, i + 1));
            num2 = Integer.parseInt(b.substring(i, i + 1));
            //该位数值的和,可能会产生进位; 该和有两部分组成
            num = num1 + num2;//部分一,本位数字求和
            num += res[i + 1];//部分二,本位数字求和在加上进位值。

            res[i + 1] = (num % 10);//本位
            res[i] = num / 10;//上一位

        }

        return res;
    }

    //对数字字符串做格式处理,不足位用0补齐
    public static String[] prepare(String a, String b) {
        String[] strs = new String[2];
        for (int i = 0; i < 2; i++) {
            strs[i] = "";
        }
        if (a.length() > b.length())
            b = doFormat(b, a.length(), 0);
        else if (a.length() < b.length())
            a = doFormat(a, b.length(), 0);
        strs[0] = a;
        strs[1] = b;
        return strs;
    }

    public static String doFormat(String str, int n, int partten) {
        String newStr = "";
        for (int i = 0; i < n - str.length(); i++) {
            newStr += "0";
        }
        return newStr + str;
    }

    public static void main(String[] args) {
        String strA = "123456789";
        String strB = "12345678910111213";
        int[] result = add(strA, strB);
        System.out.print("\t");
        for (int i = 0; i < result.length; i++) {
            if (result[i] == 0 && i == 0)
                continue;
            System.out.print(result[i]);
        }
    }
}
    00000000123456789
+   12345678910111213
------------------------
    12345679033568002

猜你喜欢

转载自blog.csdn.net/u010758410/article/details/80042798
今日推荐