题目:
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
分析:
将加法还原成最原始的计算方法,也就是分别计算进位和非进位的和,最后再将这两部分合起来,便是和。我们可以利用&和<<求进位,^求不算进位的和。
例如5+9,5的二进制是101,9的二进制是1001,先求两个数的进位,也就是5&9=1,再左移一位,2(0010)便是进位,然后再利用异或求不算进位的和,101^1001=1100,然后再利用&和^直到进位为0时为止。
程序:
C++
class Solution { public: int Add(int num1, int num2) { if(num1 == 0) return num2; if(num2 == 0) return num1; int carry = 1; while(num2 != 0){ carry = (num1 & num2) << 1; num1 = num1 ^ num2; num2 = carry; } return num1; } };
Java
public class Solution { public int Add(int num1,int num2) { if(num1 == 0) return num2; if(num2 == 0) return num1; int carry; while(num2 != 0){ carry = (num1 & num2) << 1; num1 = num1 ^ num2; num2 = carry; } return num1; } }