原创

两个长数字相加

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://jieniyimiao.blog.csdn.net/article/details/94295024

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

结果如下:

在这里插入图片描述

文章最后发布于: 2019-06-30 10:44:44
展开阅读全文
0 个人打赏
私信求帮助

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览