两个长数字相加

1.编程题目

题目:要实现两个百位长的数字直接相加
分析:因为数字太长所以无法直接相加,所以采用按位相加,然后组装的方式。(注意进位)

2.编程实现

package com.sino.daily.code_2019_6_29;

import org.apache.commons.lang3.StringUtils;

/**
 * create by 2019-06-29 19:03
 *
 * @author caogu
 */
public class Main {
    public static void main(String[] args) {

        String num1 = new String("1111111122323233333333388");
        String num2 = new String("1111111122323233333333");

        Main m = new Main();
        System.out.println(m.sum(num1, num2));
    }

    private String sum(String num1, String num2) {
        String maxNum = num1.length() > num2.length() ? num1 : num2;
        String minNum = num1.length() < num2.length() ? num1 : num2;

        //前面用0补齐
        minNum = StringUtils.repeat("0", maxNum.length() - minNum.length()) + minNum;

        System.out.println(maxNum);
        System.out.println(minNum);
        System.out.println(StringUtils.repeat("-", maxNum.length()) + "  +");

        //按位相加,向上进位
        StringBuilder sum = new StringBuilder();
        int carryBit = 0;
        for (int i = maxNum.length() - 1; i >= 0; i--) {
            int bitNum1 = Integer.parseInt(String.valueOf(maxNum.charAt(i)));
            int bitNum2 = Integer.parseInt(String.valueOf(minNum.charAt(i)));

            int bitSum = bitNum1 + bitNum2 + carryBit;
            sum.append(bitSum % 10);

            carryBit = bitSum / 10;
        }

        //处理最高位
        if (carryBit != 0) {
            sum.append(carryBit);
        }

        // 字符串反转输出
        return sum.reverse().toString();
    }
}

结果如下:

在这里插入图片描述

发布了418 篇原创文章 · 获赞 745 · 访问量 126万+

猜你喜欢

转载自blog.csdn.net/u013467442/article/details/94295024