一开始以为这道题很简单了,不让用乘除余数,可以循环用加法,但是超时了之后才注意到限制。就得模拟人进行除法的运算。代码如下:
class Solution(object):
def divide(self, dividend, divisor):
"""
:type dividend: int
:type divisor: int
:rtype: int
"""
import re
def di(dividend, divisor, x):
if x == 0:
n = 0
while dividend >= divisor:
n = n + 1
dividend = dividend - divisor
return n
if x == 1:
while dividend >= divisor:
dividend = dividend - divisor
return dividend
def div(dividend, divisor):
if divisor == 0:
return -1
if dividend == 0:
return 0
if len(str(dividend)) < len(str(divisor)):
return 0
if len(str(divisor)) == 1:
s = ''
n = 0
str1 = str(dividend)
for i in range(len(str1)):
z = int(str1[i]) + n
m = di(z, divisor, 0)
n = di(z, divisor, 1) * 10
s = s + str(m)
a = re.sub('0+', '', s)
if a == '':
return 0
else:
return int(s.lstrip('0'))
else:
#从跟被除数相同位数的开始除
s = ''
str2 = str(dividend)[:len(str(divisor)) - 1]
n = int(str2) * 10
str1 = str(dividend)[len(str(divisor)) - 1:]
for i in range(len(str1)):
z = int(str1[i]) + n
m = di(z, divisor, 0)
n = di(z, divisor, 1) * 10
s = s + str(m)
a = re.sub('0+', '', s)
if a == '':
return 0
else:
return int(s.lstrip('0'))
if dividend < 0:
if divisor > 0:
if -div(-dividend, divisor) < -2147483648:
return -2147483648
else:
return -div(-dividend, divisor)
else:
if div(-dividend, -divisor) > 2147483647:
return 2147483647
else:
return div(-dividend, -divisor)
elif dividend > 0:
if divisor < 0:
if -div(dividend, -divisor) < -2147483648:
return -2147483648
else:
return -div(dividend, -divisor)
else:
if div(dividend, divisor) > 2147483647:
return 2147483647
else:
return div(dividend, divisor)
else:
return div(dividend,divisor)