问题
思路
- 计算不带进位加法( a ^ b )
- 计算进位( a & b )
- 累加这两部分的和(???)
思路大致如上面的步骤,问题是本省需要实现加法,但是第三步又要用到加法,所以第三步的实现还是通过前两部分。直到没有进位,那么此时的加法退化成不带进位加法,用xor实现即可。
代码
class Solution {
public:
int getSum(int a, int b) {
int carry = (a&b)<<1; // 进位
int ret = a^b; // 不带进位加法
while( carry )
{
int new_carry = (carry & ret)<<1;
int new_ret = carry ^ ret;
carry = new_carry;
ret = new_ret;
}
return ret;
}
};
代码1
class Solution {
public:
int getSum(int a, int b) {
int sum = 0;
int c = 0;
do
{
sum = a^b;
c = (a&b) << 1;
a = sum;
b = c;
}while(c);
return sum;
}
};