我们知道异或是不进位的加法,对于二进制来说,当某一位均为1时需要进位。
则a&b的值中位数为1的位表示需要进位,由于后面的进位不会超过1,则某一位最多进位1次。
a+b = a^b + (a&b)<<1;
这里的加法还是无法解决,但转化为了子问题,即可以递归解决。
当a||b为0时,结果显然。
class Solution {
public:
int gao(int a,int b){
if(a==0)return b;
if(b==0)return a;
//c++ 左移运算符对默认是算术左移,需要改成无符号数变为逻辑左移形式
return gao(a^b,(unsigned int)( a & b ) << 1);
}
int add(int a, int b) {
return gao(a,b);
}
};