不用加号的加法

此博客链接:https://www.cnblogs.com/ping2yingshi/p/14204497.html

不用加号的加法

题目链接:https://leetcode-cn.com/problems/add-without-plus-lcci/

题目

设计一个函数把两个数字相加。不得使用 + 或者其他算术运算符。

示例:

输入: a = 1, b = 1
输出: 2

题解

这题我一开就知道肯定要用到什么异或,进位啥的,但是我不会用,正好看看这题。

看了别人的题解,大致意思就是不用加号的两个数相加时,需要把数先变成二进制的数,然后把对二进制的数异或,在有进位时,进位。但是题解我一个都没有看懂。

思路:

对于二进制相加,在没有进位的情况下是异或的结果。在有进位的情况下,进位相当于把二进制数左移一位。所以此题使用异或相加,左移进位。

这里需要注意,判断是否有进位是用与判断是否需要进位,因为只有两个数都为1时才有进位,而两个1为真是与的结果。当没有进位时,说明得到了相加的结果。

注意:当判断是否进位时,是判断a没有改变前的数据和b相与是否有进位。

代码

class Solution {
    public int add(int a, int b) {
        while(b!=0){
            int temp=a;
            a=a^b;
            b=(temp&b)<<1;
        }
        return a;
    }
}

 

结果

 

posted @ 2020-12-29 00:44  萍2樱释  阅读(138)  评论(1编辑  收藏  举报