leetcode题解记录-29 两数相除(python3)

152 阅读1分钟

题目

29 两数相除

题目链接

解题思路: 基于位运算实现,注意边界处理

代码记录

class Solution:
    def divide(self, dividend: int, divisor: int) -> int:
    	MAX = 2147483648
    	flag = -1 if (dividend>0 and divisor<0) or (dividend<0 and divisor>0) else 1
    	ans = 0
    	shift = 31 if flag==-1 else 30
    	a,b = abs(dividend),abs(divisor)
    	while shift>=0:
    		if a >= b<<shift:
    			a -= b<<shift
    			ans += 1<<shift
    		shift -= 1
    	ans *= flag
    	if ans > MAX-1:
    		ans = MAX-1
    	elif ans < -MAX:
    		ans = -MAX
    	return ans