两个大正整数相加两种Java实现

2019-08-15  本文已影响0人  昔日的帅哥
/**
 * Created by zw on 2019/8/4.
 * 两个大正整数相加
 */
public class BitIntegerAdd {
    
    /**
     * 循环实现
     */
    public static String add1(String a, String b) {
        int i = a.length() - 1;
        int j = b.length() - 1;
        StringBuilder builder = new StringBuilder();
        //进位
        int bonus = 0;
        while (i >= 0 || j >= 0) {
            int sum = getCharIntegerValueOfString(a, i--) + getCharIntegerValueOfString(b, j--) + bonus;
            //保存和的个位部分
            builder.append(sum % 10);
            //计算是否有进位,如果sum为11,进位为1
            bonus = sum / 10;
        }
        if (bonus > 0) {
            builder.append(bonus);
        }
        //string反转输出
        return builder.reverse().toString();
    }
    
    
    /**
     * 递归实现
     */
    public static String add2(String a, String b) {
        int i = a.length() - 1;
        int j = b.length() - 1;
        return addFun(a, b, i, j, 0, "");
    }

    /**
     * 递归,返回当前和的字符串
     *
     * @param a     字符串a
     * @param b     字符串b
     * @param i     字符串a的index
     * @param j     字符串b的index
     * @param bonus 进位数字
     * @param cur   当前和的字符串
     * @return
     */
    private static String addFun(String a, String b, int i, int j, int bonus, String cur) {

        if (i < 0 && j < 0) {
            return bonus > 0 ? String.valueOf(bonus) + cur : cur;
        }

        int sum = getCharIntegerValueOfString(a, i--) + getCharIntegerValueOfString(b, j--) + bonus;
        //进位
        bonus = sum / 10;
        //保存和的个位部分
        cur = (sum % 10) + cur;

        return addFun(a, b, i, j, bonus, cur);
    }
    
    
    /**
     * 获取string指定index的char数值
     */
    private static int getCharIntegerValueOfString(String s, int index) {
        return index < 0 ? 0 : Integer.valueOf(String.valueOf(s.charAt(index)));
    }
    
    public static void main(String[] args) {
        String a = "888888888888913";
        String b = "222222222222107";
        System.out.println(add1(a, b));
        System.out.println(add2(a, b));
    }
    //main out:
    //1111111111111020
    //1111111111111020

}
上一篇 下一篇

猜你喜欢

热点阅读