leetcode 371. 两整数之和 & 面试题 17.01. 不用加号的加法 & 剑指 Offer 65. 不用加减乘除做加法

【题目】371. 两整数之和

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

示例 1:

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

示例 2:

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

【解题思路1】位运算

leetcode 371. 两整数之和 & 面试题 17.01. 不用加号的加法 & 剑指 Offer 65. 不用加减乘除做加法_第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;
    }
}
//精简写法
class Solution {
    public int getSum(int a, int b) {
        while(b != 0){
            int temp = a ^ b;
            b = (a & b) << 1;
            a = temp;
        }
        return a;
    }
}

【题目】面试题 17.01. 不用加号的加法 & 剑指 Offer 65. 不用加减乘除做加法

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

示例:

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

提示:
a, b 均可能是负数或 0
结果不会溢出 32 位整数

你可能感兴趣的:(Leetcode,/,Online,Judge,#,位运算)