题目:不能使用 “+”、“-” 运算符计算两整数的和, 整数范围在int的范围内
分析:一般都是使用位算符。使用位运算这需要转换为二进制
- 如果每一位的值不同则m + n = m^n 。如,m = 4, n =3, 则m=100, n = 11
- 如果每一位的值都相同即m = n = (n<<1);
所以对于m和n。我们把m和n分解成上面的两种情况:分解成相同位组成的数字和不同位组成的数字
比如m = 6 = 1010 , n = 1001,后两位不同, m 分解成1000 + 10 , n分解成1000 + 01
m + n = 1000 + 1000 + 10 + 01 = (1000 + 1000) + (10 + 01);
=((m&n)<< 1) + m^n
由于不能使用加法,所以下面的运算不能使用 +
((m&n)<< 1) + m^n //不能使用 +
怎么解决? 可以使用递归方法,直到 m^n = 0 或 (m&n)= 0
public int getSum(int a, int b) {
if (b == 0) {
return a;
}
if (a == 0) {
return b;
}
return getSum((a & b) << 1, a ^ b);
}
也可以使用while循环