记住:不用加法的加法运算 = 不进位加法 + 只进位加法 = 异或运算 + 与运算后向左进一位。
又为了消除上式中的加号,需要用一个while循环来判断,当不再进位时跳出循环。
class Solution {
public:
int add(int num1, int num2){
while (num2)
{
int not_carry = num1 ^ num2;
int carry = ((unsigned int)(num1 & num2) << 1);
num1 = not_carry;
num2 = carry;
}
return num1;
}
};
本题与力扣上的 剑指 Offer 65. 不用加减乘除做加法 相同,但力扣上的非要加一个(unsigned int)判断负数的情况,想了一下加不加好像是一个意思?希望有人来解答一下😥
看到一种解释是,LeetCode中国版的C++好像不支持负值左移,会报错😥
原来如此!学习了