不能使用四则运算,就是考虑位运算,那么就得考虑位运算如何做加法呢 举例:
- 100+101=4+5=9=1001
- 100 ^ 101 = 001 (此时没有进位,只是单纯0+0 0+1 1+0)
- 100 & 101 = 100 (此时标志位1的就是要进位的,那么既然是进位,就得再<<1 左移位)
- 100 << 1 = 1000
- 0001 ^ 1000 = 1001
- 0001 & 1000 = 0000
可以再想一想其他例子,类似的思路就是: 先异或,后与运算,对与的结果左移,然后继续这个过程,直到与运算结果为0
程序如下:
class Solution {
public:
int Add(int num1, int num2) {
//位运算
int sum,forward;
do{
sum=num1^num2;
forward=(num1&num2)<<1;
num1=sum;
num2=forward;
}while(num2!=0);
return num1;
}
};
最后返回num1即可,也就是sum