题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
解题思路
a ^ b 表示没有考虑进位的情况下两数的和,(a & b) << 1 就是进位。
递归会终止的原因是 (a & b) << 1 最右边会多一个 0,那么继续递归,进位最右边的 0 会慢慢增多,最后进位会变为 0,递归终止。
//简单写法
public int Add(int num1, int num2) {
if(num2 == 0) return num1;
return Add(num1 ^ num2, (num1 & num2) << 1);
}
//写法2
public class Solution {
public int Add(int num1, int num2)
{
if(num2 == 0)
return num1;
int sum,carry;
do
{
sum=num1 ^ num2;//1.不考虑进位,各位相加,即是 异或运算 、、3.1+2步骤相加(异或的不同为1啊)即最后结果
carry=(num1 & num2) << 1; //记下进位
num1=sum;
num2=carry;
}while(num2!=0);//num2==0时即没有进位了
return num1;
}
}