java:字符串实现大数相加

字符串实现大数相加

给定两个数字字符串,求出相加的和
思路:需要将两个字符串相对应的位进行相加,注意不能将整个字符串转化为数字,进行直接相加,这样会出现溢出的问题。

    public String bigNumverAdd(String number1, String number2) {

        StringBuffer result = new StringBuffer();

        //字符串反转
        String n1 = new StringBuffer(number1).reverse().toString();
        String n2 = new StringBuffer(number2).reverse().toString();

        //获取长度
        int len1 = n1.length();
        int len2 = n2.length();
        int maxLength = len1 > len2 ? len1 : len2;

        //进位标志
        int flag = 0;
        //是否越界(最高位是否进1)
        boolean overFlow = false;

        //将两个字符串补齐,高位用了0补位
        if (len1 < len2) {
            for (int i = len1; i < len2; i++) {
                n1 += "0";
            }
        }

        if (len2 < len1) {
            for (int i = len2; i < len1; i++) {
                n2 += "0";
            }
        }

        //进行相加
        for (int i = 0; i < maxLength; i++) {
            int sum = Integer.parseInt(n1.charAt(i) + "") + Integer.parseInt(n2.charAt(i) + "") + flag;

            //判断是否进位
            if (sum >= 10) {
                if (i == maxLength - 1) {
                    overFlow = true;
                }
                flag = 1;
                result.append(sum - 10);
            } else {
                flag = 0;
                result.append(sum);
            }
        }

        //最高位是否是要进1
        if (overFlow) {
            result.append(flag);
        }

        //讲结果反转返回
        return result.reverse().toString();
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值