zoukankan      html  css  js  c++  java
  • 371. Sum of Two Integers

    Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.

    Example:
    Given a = 1 and b = 2, return 3.

    思路: 这里用到了一个半加法的思想, 即两位单独的位相加其结果可以用异或得到, 进位可以用与得到. 然后对于两个数字来说同样可以延伸这个思想. 

    举个例子: 11+5, 其二进制形式为11: 1011, 5: 0101

    1. 那么两个位置都为1的地方就需要进位, 所以进位值就为0001. 原位置两个数相加的结果为那个位置值的异或即1110, 即两个位置值如果不一样就为1, 一样的话要么两个位置原来值都为0结果也为0, 要么进位, 那么结果依然是0. 

    2. 接下来就要把进位位和下一位相加, 所以进位值左移一位,即0001变为0010, 重复上面操作可得新的进位值为0010, 原位置异或(即相加)结果为1100.

    3. 继续重复上面操作直到进位为0, 可得到最终结果10000, 即16

    /**
     * @param {number} a
     * @param {number} b
     * @return {number}
     */
    var getSum = function(a, b) {
        var temp;
        while(a!=0){
            temp=(a&b)<<1;
            b=a^b;
            a=temp;
        }
        return b;
    };
    /**
     * @param {number} a
     * @param {number} b
     * @return {number}
     */
    var getSum = function(a, b) {
        return a&b ? getSum((a&b)<<1,a^b) : a|b;
    };
  • 相关阅读:
    RedHat Linux-配置YUM仓库
    04、管道符、重定向与环境变量
    03、新手必须掌握的Linux命令
    size_t
    decltype关键字
    python numpy使用笔记
    Huffman编码
    动态规划(dynamic programming)
    Prim算法
    Kruskal算法
  • 原文地址:https://www.cnblogs.com/baiyuhong/p/5772761.html
Copyright © 2011-2022 走看看