剑指offer都是技巧题

class Solution {
public:
    int Add(int num1, int num2) {
      //  一个存放相加之后不进位的信息,一个存放进位后要相加的位
      //  直到满足不再进位
      return num2 ? Add(num1 ^ num2, (num1 & num2) << 1) : num1;
    }
};
class Solution {
public:
    int Add(int num1, int num2) {
      //  进位以及两数不进位之和
      int carry = (num1 & num2) << 1;
      num1 = num1 ^ num2;
      
      while (carry) {
        int tmp = num1;
        //  得出当前轮的不进位之和
        num1 = num1 ^ carry;
        //  上一轮的数据与上一轮的进位相加,判断下一轮的进位
        carry = (tmp & carry) << 1;
      }
      
      return num1;
    }
};