zoukankan      html  css  js  c++  java
  • 29. 两数相除





    思路:

    eg:11÷3
    
    ∵11>3
    
    ∴res>=1
    
    又∵11>3+3=6
    
    ∴res>=2 (1+1)
    
    又∵11<6+6=12
    
    ∴res<4 (2+2)
    
    即2<=res<4
    
    递归部分:
    
    又11-6=5>3
    
    ∴restemp >= 1
    
    又∵5<6 (3+3)
    
    ∴restemp<2 (1+1)
    
    即1<=restemp<2
    
    又∵5-3=2<3
    
    ∴restemp = 1
    
    返回:
    
    ∴res = 2 + restemp = 2+1=3
    

    class Solution(object):
        def divide(self, dividend, divisor):
            """
            :type dividend: int
            :type divisor: int
            :rtype: int
            """
            if dividend == 0:
                return 0
            # 符号
            sign = 1
            if (dividend > 0 and divisor < 0) or (dividend < 0 and divisor > 0):
                sign = -1
            # 溢出的情况
            if abs(divisor) == 1:
                if abs(dividend) > 2 ** 31 - 1:
                    return 2 ** 31 - 1 if sign > 0 else -2 ** 31
            tema = abs(dividend)
            temb = abs(divisor)
            res = self.DiGuiDiv(tema, temb)
            return res if sign > 0 else -res
    
        def DiGuiDiv(self, a, b):
            if a < b:
                return 0
            count = 1
            temp = b
            while (temp + temp) <= a:
                count += count
                temp += temp
            return count + self.DiGuiDiv(a - temp, b)
    
    
    if __name__ == '__main__':
        solution = Solution()
        print(solution.divide(-2147483648, -1))
    
  • 相关阅读:
    C#发送邮件
    C# MD5加密
    html实现艺术字
    sql日期转换比较问题
    web 抓取
    NHibernate主要数据操作方法
    写日志
    备忘 sql分页
    自我介绍
    企业级应用和互联网应用的区别
  • 原文地址:https://www.cnblogs.com/panweiwei/p/13065179.html
Copyright © 2011-2022 走看看