剑指Offer 不用加减乘除做加法
题目描述:
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
解题步骤:
由于题目限定了无法使用加减乘除来计算两个数之和,所以我们采用二进制来计算两数之和。
对于两数之和,我们必须计算出其进位 与 和才能计算出两数之和。对于进位我们直接对两个数进行按位与运算 & 就能计算出,还需向右移动1位。对于 求和我们可以采用按位异或 ^ 计算出。只要当进位为0的时候我们就可以退出循环停止计算。
为什么采用异或 ^ 不用 或运算|,因为如果两数某个二进制位置同为1,此时进位必须为1,和必须为0。如果采用或运算得到的结果就是1,与结果不符。
代码:
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;
}