剑指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;
}
};