LintCode 1.A + B 问题,给出两个整数a和b, 求他们的和, 但不能使用+等数学运算符。
注意事项
你不需要从输入流读入数据,只需要根据
aplusb的两个参数a和b,计算他们的和并返回就行。
思路:
把加法拆分为:
相加->异或运算
进位->与运算
将得到的结果(相加的结果和进位)再做同样的操作(相加),直到进位为0,递归完成。
异或运算:
不同为1,相同为0
0 ^ 0 = 0
1 ^ 0 = 1
0 ^ 1 = 1
1 ^ 1 = 0
按位异或3个特点:
1)0 ^ 0 = 0, 0 ^ 1 = 1 0异或任何数 = 任何数
2)1 ^ 0 = 1, 1 ^ 1 = 0 1异或任何数 = 任何数取反
3)任何数异或自己 = 把自己置0
进位运算,m<
public int aplusb(int a ,int b){
if (a == 0) return b;
if (b == 0) return a;
int num1 = a ^ b; //异或
int num2 = (a & b)<<1; //与后,左进位
return aplusb(num1 ,num2);
}