。長い間考えた後、それはまだ困惑され、それでは、公式のアイデアを与えてみましょう
:リンクNiuke.comの公式な答え。
ここではいくつかのです好的解法
。
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;
}
}
別のハイスコアソリューション
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;
}
};
詳細版
class Solution {
public:
int Add(int num1, int num2)
{
return num2 ? Add(num1^num2, (num1&num2)<<1) : num1;
}
};