剑指offer 65. 不用加减乘除做加法(Leetcode 371. Sum of Two Integers)

剑指offer 65. 不用加减乘除做加法(Leetcode 371. Sum of Two Integers)

https://leetcode.com/problems/sum-of-two-integers/

题目:

写一个函数,求两个整数之和,要求在函数体内不得使用加减乘除这四个符号。

分析:

对于不能使用正常的四则运算符,一般就是使用位运算了。而本题要想实现加法,只能使用异或了。

需要注意的是,加法的时候涉及进位,而进位的实现利用与运算

此外,进位之后还有可能产生进位,所以要在循环里实现。

int Add(int num1, int num2) {
    int sum, carry;
    do {
        sum = num1 ^ num2;  // 异或实现不进位的加法
        carry = (num1 & num2) << 1;  // 与实现得到进位数的二进制值
        num1 = sum;
        num2 = carry;
    } while (num2 != 0);
    return num1;
}

总结:

本题虽然是一道easy题,且寥寥几行代码,但从思路到实现,其实是很巧妙的,也不是说很容易就写这么完美。比如将sum赋予num1,carry赋予num2。

posted @ 2019-09-10 16:30  FlashX  阅读(241)  评论(0编辑  收藏  举报