题目链接
https://www.nowcoder.com/questionTerminal/e7e0d226f1e84ba7ab8b28efc6e1aebc
题目描述
请编写一个函数,将两个数字相加。不得使用+或其他算数运算符。
给定两个int A和B。请返回A+B的值
测试样例:
输入:
1,2
返回:
3
解题思路:
实现:位运算,递归实现。
-
递归出口:B为0,即被加数为0.
-
异或^ 与 求和 操作相似,只不过没有进位操作
-
使用 按位与& 来产生进位效果
以 1+2 为例写下实现过程:
异或:1^2
1 :01
^ 2: 10
结果: 11 -> 3
进位:(1&2) << 1
1 :01
& 2: 10
结果: 0
0<<1 =0
因为进位结果为 0 ,所以直接输出异或结果
实现代码
public class UnusualAdd{
public static int addAB(int A, int B) {
if(B == 0) { //第四步:
return A; //出口
} else {
int sum = A^B; //第一步:3
int carry = (A&B) << 1; //第二步:0
return addAB(sum,carry); //第三步:(3,0)
}
}
public static void main(String[] args) {
System.out.println(addAB(1,2));
}
}