这道题目不能用上除法,乘法,和取余数。所以需要你每次都减去减数,但是如果每次只减一个,那么就太慢了。所以关键是每次减掉 2k∗divisor ,k的值取决于 2k∗divisor 是最接近于dividend的数。
class Solution(object):
def divide(self, dividend, divisor):
max_int = 2147483647
divd,divs = abs(dividend),abs(divisor)
res = 0
while divd>=divs:
a,i = divs,0
while a<=divd:
a<<=1
i+=1
res += 1<<(i-1)
divd -= (a>>1)
if res >max_int:res = max_int if not ((dividend>0) ^ (divisor>0)) else max_int+1
return res if not ((dividend>0) ^ (divisor>0)) else -res