兩個長數字相加

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();
    }
}

結果如下:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章