题目描述:leetcode371
Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.
Example 1:
Input: a = 1, b = 2
Output: 3
Example 2:
Input: a = -2, b = 3
Output: 1
分析:
a ^ b 得到不进位的位的值
(a&b)<<1 得到进位的位的值
即 a + b = a^b + (a&b)<<1
循环终止条件 b = 0; 原因:进位会不断地左移,当不进位的最高位为0时,进位的位一定会变为0。
视频讲解
golang代码实现:
//迭代实现
func getSum(a int, b int) int {
for b != 0 {
temp := a ^ b
b = (a & b) << 1
a = temp
}
return a
}
//递归实现
func add(a int, b int) int {
if b != 0 {
return add( a^b, ( (a&b)<<1 ) )
}else{
return a
}
}
// 不用 + - 号 计算两个整数的减法 go中的取反运算符是^ 补码 = 反码 + 1
func getSub(a int, b int) int {
return add(a, add(^b, 1))
}
func main() {
fmt.Print(getSub(50, 30))
}