371. Sum of Two Integers
Calculate the sum of two integers a and b, but you are not allowed to use the operator +
and -
.
Example:
Given a = 1 and b = 2, return 3.
Credits:
Special thanks to @fujiaozhu for adding this problem and creating all test cases.
题意:给你两个数,不用 + 和 - 实现两数相加。
类比十进制:例如13+8:
(1)个位:3+8 = 1 进位:1
(2)十位:1+0+1=2 进位:0
(2)百位:0 + 0 + 0 = 0 结束
答案: 21
下面怎么实现二进制加法: 3 + 2
3 = 1 1
2 = 1 0
现在我们从右面到左开始
(1)第一位:1 + 0 = 1 进位 0
(2)第二位:1 + 1 + 0 =0 进位 1
(3)第三位:0 + 0 +1= 1 进位 0
(4)第四位: 0 + 0 + 0 = 0 结束
根据异或的思想:相同为0(进位),相异为 1(无进位)
与运算 : 相同为1,但是要进位到后一位,所以左移一位
结束条件:其中一个数为0
我的代码:
class Solution {
public:
int getSum(int a, int b)
{
int res,carry;
while(b!=0)
{
res=a^b; //本位
carry = (a&b)<<1; //进位
a=res;
b=carry;
}
return res;
}
};