After thinking about it for a long time, it is still puzzled, so let's give an official idea.
Link: Official answer of Niuke.com.
Here are some 好的解法
.
public class Solution {
public int Add(int num1,int num2) {
int result = 0;
int carry = 0;
do{
result = num1 ^ num2; //不带进位的加法
carry = (num1 & num2) << 1; //进位
num1 = result;
num2 = carry;
}while(carry != 0); // 进位不为0则继续执行加法处理进位
return result;
}
}
Another high score solution
class Solution {
public:
int Add(int num1, int num2)
{
int sum,res;
while(num2)
{
sum=num1^num2;
res=(num1&num2)<<1;
num1=sum;
num2=res;
}
return num1;
}
};
Detailed version
class Solution {
public:
int Add(int num1, int num2)
{
return num2 ? Add(num1^num2, (num1&num2)<<1) : num1;
}
};