跳转至

剑指 Offer 65. 不用加减乘除做加法#

问题描述#

写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。

 

示例:

输入: a = 1, b = 1
输出: 2

 

提示:

  • ab 均可能是负数或 0
  • 结果不会溢出 32 位整数

解题思路#

单独考虑每一位与进位即可。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
class Solution {
public:
    int add(int a, int b) {
        bool c = 0; // 进位
        int ans = -1;

        for (int i = 0; i <= 31; ++i) {
            int a0 = (a >> i) & 1, b0 = (b >> i) & 1;
            ans &= ~(1 << i) ^ ((a0 ^ b0 ^ c) << i);
            c = a0&b0 | a0&c | b0&c;
        }
        return ans;
    }
};
返回顶部

在手机上阅读