leetcode-29
给定两个整数,被除数 dividend
和除数 divisor
。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend
除以除数 divisor
得到的商。
算法设计:
用2进制的左移操作,每次对被除数左移1位,比较除数与被除数左移的后的大小关系,并在结果中加上左移的数据,直到被除数小于除数为止。
源代码:
def divide(self, dividend, divisor):
"""
:type dividend: int
:type divisor: int
:rtype: int
"""
positive=(dividend <0) is (divisor<0)
dividend,divisor=abs(dividend),abs(divisor)
res=0
while dividend>=divisor:
temp,i=divisor,1
while dividend>=temp:
dividend -=temp
res+=i
i=i<<1
temp=temp<<1
if not positive:
res=-res
return min(max(-2147483648,res),2147483647)