zoukankan      html  css  js  c++  java
  • 剑指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。

  • 相关阅读:
    图书管理系统
    关键路径
    最短路径

    最小生成树、最短路径
    Huffman编码
    LA 3401
    UVA 10881
    OI 刷题记录——每周更新
    4396: [Usaco2015 dec]High Card Wins
  • 原文地址:https://www.cnblogs.com/Flash-ylf/p/11498213.html
Copyright © 2011-2022 走看看