剑指 Offer 65. 不用加减乘除做加法
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。
示例:
输入: a = 1, b = 1
输出: 2
位运算
C++中负数不支持左移位,因为结果是不定的
class Solution {
public:
int add(int a, int b) {
while(b != 0){
int c = (unsigned int)(a & b) << 1;
a = a ^ b;
b = c;
}
return a;
}
};
递归
class Solution {
public:
int add(int a, int b) {
if(b == 0){
return a;
}
return add(a ^ b, (unsigned int)(a & b) << 1);
}
};