美文网首页
LeetCode刷题 371. 两整数之和

LeetCode刷题 371. 两整数之和

作者: 逍遥白亦 | 来源:发表于2021-01-19 18:59 被阅读0次

371. 两整数之和

题目

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

示例 1:

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

示例 2:

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

思路

从上面的表格就可以发现,低位 = a^b,进位 = a & b。这样的计算可能要持续多次,回想一下在十进制的计算中,如果进位一直大于0,就得往后面进行计算,在这里也是一

样,只要进位不是0,我们就得一直重复计算低位和进位的操作(需要在下一次计算之前要把进位向左移动一位,这样进位才能和更高位进行运算)。这个时候的a和b就是刚才计算的低位和进位,用简单的加法迭代的代码表示:

代码

class Solution {
public int getSum(int a, int b) {
    if (a==0) return b;
    if (b==0) return a;
    int lower;
    int carrier;
    while (true) {
        lower = a^b;    // 计算低位
        carrier = a&b;  // 计算进位
        if (carrier==0) break;
        a = lower;
        b = carrier<<1;
    }
    return lower;
    }
}

相关文章

网友评论

      本文标题:LeetCode刷题 371. 两整数之和

      本文链接:https://www.haomeiwen.com/subject/jrsczktx.html