29 leetcode - Divide Two Integers

来源:互联网 发布:ipad监控软件 编辑:程序博客网 时间:2024/05/01 22:49

根据公式num=a0 * 2^0 + a1 * 2^1 + a2 * 2^2 + … + an * 2^n
左移一位相当于乘以2

'''英文:Divide two integers without using multiplication, division and mod operator.If it is overflow, return MAX_INT.中文:不使用乘法,除法,取余,将两个整数相除'''class Solution(object):    def divide(self, dividend, divisor):        """        :type dividend: int        :type divisor: int        :rtype: int        """        if divisor == 0 or (dividend == -2147483648 and divisor == -1): #除数为0,最大负数/-1越界            return 2147483647        flag = 1        if (divisor > 0 and dividend < 0) or (divisor < 0 and dividend > 0):            flag = -1        #保证都为正数        dividend = abs(dividend)        divisor = abs(divisor)        if dividend < divisor:  #除数大于被除数的情况            return 0        move = 0        #获取pow(divisor,n) <= dividend < pow(divisor,n+1)中的n        while (divisor << (move + 1)) <= dividend:              move += 1        ret = 0        while move >= 0 and dividend > 0:            if dividend >= (divisor << move):                ret += (1 << move)                dividend -= (divisor << move)            move -= 1        if flag == -1:            ret = -ret        return retif __name__ == "__main__":    s = Solution()    print s.divide(-2147483648,-1)
0 0
原创粉丝点击