根据公式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 ret
if __name__ == "__main__":
s = Solution()
print s.divide(-2147483648,-1)