思路
数的运算只有四则运算和位运算,题目不允许进行四则运算,只有通过位运算进行求解。
无进位和 与 异或运算 规律相同,进位 和 与运算 规律相同(并需左移一位)先求异或,进位为与,进位加上异或值为最后的结果,迭代求出即可
!C++中负数不能左移,注意转换成unsigned int!
class Solution {
public:
int add(int a, int b) {
int sum = 0, carry = 0;
while(b) {
sum = a ^ b;
carry = (unsigned int) (a & b) << 1;
a = sum;
b = carry;
}
return a;
}
};