Java解决两个大数相加(简单又高效)

本文介绍了一种处理大数相加的算法实现方法,通过字符数组逆序遍历的方式逐位进行加法运算,并妥善处理进位问题。该算法能够有效解决传统整型溢出的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两个大数相加

倒着从低位相加 这样加完之后如果有进位,下次循环就可以考虑加上进位


    public  String  sum(String s1,String s2){
        char[] char1 = s1.toCharArray();
        char[] char2 = s2.toCharArray();
        int flag=0;//记录进位
        int i=char1.length,j=char2.length;//记录两个长度 当索引index
        StringBuilder sb=new StringBuilder();//记录结果,后面会反转过来
        while (--i >= 0 | --j >= 0) {//保证同时拿个位数计算,下次同时拿十位数计算,其中不能用||因为这是逻辑或(会短路)  |是按位或(两个都会执行)
            //由后往前加 ,这里char转int就直接-’0‘处理了 ,如果其中一个索引遍历完了不会停止,等待另一个索引也小于0结束
            int res = (i>=0 ?char1[i]-'0':0) + (j >=0 ?char2[j]-'0':0)+flag;
            if (res > 9){ flag = 1; }  //更新flag
            else { flag = 0; }
            sb.append(res%10);//大不大于10都只要个位
        }
        if(flag==1) sb.append(flag);//两个加完 有可能还有进位,要把最后一个进位加上
        return sb.reverse().toString();
    }

 测试结果:成功!

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值