题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
解题思路
我们可以利用位运算,两个数相加先不考虑进位,得到结果,如5+17,101+10001,在不考虑进位时,得到的是10100,也即两个数异或。然后再对得到的数加上进位数。进位数只有在两个数均为1的情况下发生进位(相与为1),相与之后得到的结果是当前不为0的为的下一个位需要加上进位数,因此对相与结果左移一位。然后对两个结果相加,此时操作和上面的操作一致,直至没有进位。
实现
public class Solution {
public int Add(int num1,int num2) {
int adder, result;
do{
adder = (num1 & num2) << 1;
result = num1 ^ num2;
num1 = result;
num2 = adder;
}while (adder != 0);
return result;
}
}