【剑指Offer-65】不用加减乘除做加法

问题

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

解答

class Solution {
public:
    int add(int a, int b) {
        while (b) {
            int c = (unsigned)(a & b) << 1;
            a ^= b;
            b = c;
        }
        return a;
    }
};

重点思路

无进位和异或运算 规律相同,进位与运算 规律相同(并需左移一位)。因此,无进位和n与进位c的计算公式如下:

由于n(无进位和)+c(进位和)部分也不能使用加法,我们可以将无进位和进位和作为新的ab再做相同的计算,直到进位和为0。

由于C++对负数的左移运算没有定义,所以我们要将有符号数转为无符号数,再进行移位操作。

posted @ 2021-03-07 17:41  tmpUser  阅读(34)  评论(0编辑  收藏  举报