力扣67 二进制数相加(大数相加)

力扣67 二进制数相加(大数相加),第1张

力扣67 二进制数相加大数相加) 大数相加

    以前每次做大数相加的题都怕怕,感觉老是处理不好进位啥的,这次碰到了二进制数,和大数相加的原理差不多,这次我终于找到比较规范又简单的解法,这不得来写下博客。
    题目可以直接找到,在这里就不多说了

class Solution {
    public String addBinary(String a, String b) {
        StringBuilder ans = new StringBuilder();    //答案
        int i = a.length() - 1, j = b.length() - 1; //从最后开始遍历(个位)
        int t = 0;  //进位
        while(i >= 0 || j >= 0 || t != 0) { //如果没有遍历完两个数,或者还有进位
            if(i >= 0) t += a.charAt(i--) - '0';    //如果a还有数
            if(j >= 0) t += b.charAt(j--) - '0';    //如果b还有数
            ans.append(t % 2);  //加入当前位的和取模
            t /= 2; //进位
        }
        return ans.reverse().toString();    //由于计算之后是个位在第一位,所以要反转
    }
}

    我们也知道,java中的字符串是比较好用的,而加法本来就是需要从最后一位开始相加,得到的答案也是逆着的,所以我们需要调用reverse()函数进行反转,最后得到正确答案。
接着就来看看怎么处理的

  		while(i >= 0 || j >= 0 || t != 0) { //如果没有遍历完两个数,或者还有进位
            if(i >= 0) t += a.charAt(i--) - '0';    //如果a还有数
            if(j >= 0) t += b.charAt(j--) - '0';    //如果b还有数
            ans.append(t % 2);  //加入当前位的和取模
            t /= 2; //进位
        }

    当两个数字都没有计算完,或者还有进位的时候,就开始相加,因为有的计算就是两个数字都已经计算完成,但是会有进位,这个时候进位也需要加上去,所以当有进位得时候,也需要进入循环。
    看看循环体内部,我们需要计算当前位上两个数字的和,通过这个和对2取余就能得到该位上分数线下边的,这个和整除2就能得到进位,分数线下边的就是我们需要的结果,t/=2得到的就是进位,通过循环,将进位和后面的数字相加,得到的和%2又是结果,整除2还是进位…
    这段代码简单易懂,以后大数相加之类的都可以参照这个代码。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4669462.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-06

发表评论

登录后才能评论

评论列表(0条)

保存