Divide two integers without using multiplication, division and mod operator.
因为不能用乘法除法等,思路仍然是把被除数计算出多少个除数相加。为了计算加快,才用2的次方
比如17除以3,则即3,6,12,24。发现24比17大,则退回12,然后重新计算5除以3,一直到被除数小于除数。
class Solution:
# @return an integer
def divide(self, dividend, divisor):
flag=1 #符号位标记
if dividend==0 or divisor==0:#如果被除数或者除数是0,返回0
return 0
if dividend<0:#如果是负数,转为正数,并且符号位翻转
flag=0-flag
dividend=0-dividend
if divisor<0:
flag=0-flag
divisor=0-divisor
result=0#记录最后的商
while (divisor<=dividend):#只要除数不大于被除数就进入循环
n=1#暂时的商
y=divisor
while y+y<=dividend:
n=n+n
y=y+y
dividend=dividend-y#因为跳出循环了,则重新计算除数,y的部分已经计算过
result=result+n
if flag==-1:
result=0-result
return result