LeetCode 371: Sum of Two Integers
题目描述
不适用加减操作计算两个整数的和。
解题思路
经典的题,利用异或和位与实现两个数的加法,a^b表示没有考虑进位的情况下两数的和,(a&b)<<1就是进位。具体原理此处不再赘述。需要注意的是,LeetCode提交会报错(Line 4: Char 40: runtime error: left shift of negative value -2147483648 (solution.cpp)),只需要将左移的操作数强制转化为无符号数就行。
AC代码
class Solution {
public:
int getSum(int a, int b) {
return b == 0 ? a : getSum(a^b, (unsigned int)(a&b)<<1);
}
};