371. 两整数之和

371. 两整数之和

不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a 、b ​​​​​​​之和。

示例 1:

输入: a = 1, b = 2
输出: 3
示例 2:

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

解题思路

  • a ^ b可以得到两数相加不进位的加法结果

  • (a & b) << 1可以得到两数相加产生的进位

将不进位的加法结果与进位相加,即可得到两数相加的实际结果。需要注意的是:不进位加法结果与进位相加有可能再次造成进位,所以需要迭代处理,直到不再产生新的进位为止。

根据如上思路,可以比较容易地得到递归的解法:

递归

int getSum(int a, int b) {
    if(!(a&b))return a^b;
    return getSum(a^b,(a&b)<<1);
}

迭代

int getSum(int a, int b) {
    while (b) {
        auto carry = ((unsigned int)(a & b)) << 1;
        a ^= b;
        b = carry;
    }
    return a;
}

 

posted @ 2020-08-24 00:08  图神经网络  阅读(111)  评论(0编辑  收藏  举报
Live2D