不能使用四则运算,就是考虑位运算,那么就得考虑位运算如何做加法呢 举例:

  • 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