题目
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.
思路
运用数字电路里的加法器原理,异或得和,相与得进位
两个数按位异或得到对应的各位和sum,按位与得到各位产生的进位tempCarry,tempCarry左移一位得到进位的真正值carry。
然后问题转化为继续求sum + carry的和,重复上面步骤直到carry为0。
代码
class Solution {
public:
int getSum(int a, int b) {
int sum = 0, temp = 0, carry = 0;
sum = a ^ b;
carry = (a & b) << 1;
while(carry) {
temp = sum;
sum = sum ^ carry;
carry = (temp & carry) << 1;
}
return sum;
}
};