剑指 Offer 65. 不用加减乘除做加法
难度:简单
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
示例:
输入: a = 1, b = 1
输出: 2
提示:
a
,b
均可能是负数或 0- 结果不会溢出 32 位整数
解答:
class Solution {
//通过^异或运算,相同为0,不同为1得到所有位的和
//通过&与运算得到所有位的进位并左移一位
//如此往复,最终当没有进位时,得到a + b
public int add(int a, int b) {
if (b == 0) return a;
// 转换成非进位和 + 进位
return add(a ^ b, (a & b) << 1);
}
}
class Solution {
//通过^异或运算,相同为0,不同为1得到所有位的和
//通过&与运算得到所有位的进位并左移一位
//如此往复,最终当没有进位时,得到a + b
public int add(int a, int b) {
while(b != 0){
int c = a & b;
a = a ^ b;
b = c << 1;
}
return a;
}
}
参考自:
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/bu-yong-jia-jian-cheng-chu-zuo-jia-fa-lcof/solution/mian-shi-ti-65-bu-yong-jia-jian-cheng-chu-zuo-ji-7/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。