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

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

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

题目:code

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

分析:leetcode

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

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

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

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。总结

相关文章
相关标签/搜索