解题思路:
1、 四则运算不能算的情况下,肯定只能借助位运算,所以应该考虑位运算
2、 假设两个数的二进制位00001 和 10001,两个数相加的过程就是
- 第一步:先把二进制的各位相加但不进位,10001;
- 第二步:记下进位,00001
- 第三步:把前两步的结果相加,得到10010
分析上述三个过程发现
- 第一步实际上就是两个数的异或结果
- 第二步进位就是两个数&的结果再左移一位:
第三步是两数相加,和要求的一样可以递归进行,直到第二个数为0为止。
代码实现:class Solution { public: int Add(int num1, int num2) { do{ int sum=num1^num2; int carry=(num1&num2)<<1; num1=sum; num2=carry; }while(num2!=0); return num1; } };