leetcode29.两数相除

题目:
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。

返回被除数 dividend 除以除数 divisor 得到的商。

整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
leetcode29.两数相除_第1张图片
思路:
a = b * 2^(i1) + b * 2^(i2) + … + c (c < b)
= b * (2 ^ i1 + 2 ^ i2 + …) + c

解答:

class Solution:
    def divide(self, dividend: int, divisor: int) -> int:
        #正数向下取整,负数向上取整
        if dividend==-2147483648 and divisor==-1:
            return 2147483647
        a,b,res=abs(dividend),abs(divisor),0
        for i in range(31,-1,-1):
            if (b<<i)<=a:
                res+=1<<i
                a-=b<<i
        return res if (dividend>0)==(divisor>0) else -res

你可能感兴趣的:(Python,编程,leetcode,leetcode,算法)