题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
public class Solution {
public int Add(int num1,int num2) {
if(num1 == 0)
return num2;
int a = (num1 & num2) << 1;
int b = num1 ^ num2;
return Add(a,b);
}
}
将其改为递归形式:
public class Solution {
public int Add(int num1,int num2) {
while(num1 != 0){
int a = (num1 & num2) << 1;
int b = num1 ^ num2;
num1 = a;
num2 = b;
}
return num2;
}
}
使用相与并右移操作,求两数的进位。
使用异或操作,求两数不进位的和。
将这两个数相加,形成一个递归(重复前面的两步形成一个循环,直到不进位为止),递归的结束即右移操作之后为0。