zoukankan      html  css  js  c++  java
  • leetcode-mid-math-371. Sum of Two Integers-NO-???

    mycode:

    没思路啊。。。二级制四则运算不熟悉。。。

    参考:

    既然不能使用加法和减法,那么就用位操作。下面以计算5+4的例子说明如何用位操作实现加法:
    1. 用二进制表示两个加数,a=5=0101,b=4=0100;
    2. 用and(&)操作得到所有位上的进位carry=0100;
    3. 用xor(^)操作找到a和b不同的位,赋值给a,a=0001;
    4. 将进位carry左移一位,赋值给b,b=1000;
    5. 循环直到进位carry为0,此时得到a=1001,即最后的sum。

    上面思路还算正常,然而对于Python就有点麻烦了。因为Python的整数不是固定的32位,所以需要做一些特殊的处理,具体见代码吧。
    代码里的将一个数对0x100000000取模(注意:Python的取模运算结果恒为非负数),是希望该数的二进制表示从第32位开始到更高的位都同是0(最低位是第0位),以在0-31位上模拟一个32位的int。

    注意:

    对于:该数的二进制表示从第32位开始到更高的位都同是0  ~  方法一:取余数 方法二:异或

    return:不懂。。?????

    class Solution(object):
        def getSum(self, a, b):
            """
            :type a: int
            :type b: int
            :rtype: int
            """
            while b != 0:
                carry = a & b
                a = (a ^ b) % 0x100000000
                b = (carry << 1) % 0x100000000
            return a if a <= 0x7FFFFFFF else a | (~0x100000000+1)
    class Solution(object):
        def getSum(self, a, b):
            """
            :type a: int
            :type b: int
            :rtype: int
            """
            MAX = 0x7FFFFFFF
            MIN = 0x80000000
            mask = 0xFFFFFFFF
            while b != 0:
                a, b = (a ^ b) & mask, ((a & b) << 1) & mask
    
            return a if a <= MAX else ~(a ^ mask)
  • 相关阅读:
    摊还分析
    web端手机方向传感器闲谈
    研一一年论文总结(下)
    Jupyter自定义设置详解
    HAProxy实现动静分离和负载均衡
    欧拉项目 323题
    mysql基本操作
    以后的IT路还很长(1)
    【翻译】在Ext JS集成第三方库
    吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring IoC容器BeanFactory和ApplicationContext
  • 原文地址:https://www.cnblogs.com/rosyYY/p/10984323.html
Copyright © 2011-2022 走看看