题目:
Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT.
Java
public class Solution {
public int divide(int dividend, int divisor) {
/*思路:在dividend中不断减去divisor,计数。
细节:要考虑负数情况,要提高效率,divisor不断乘2(位移操作)*/
boolean sign = ((long)dividend*(long)divisor<0);
long a = Math.abs((long)dividend);//考虑溢出
long b = Math.abs((long)divisor);
int res=0;
while(a>=b){
long base = b; int shift=-1;
while(base<=a){
base = base<<1;
shift++;
}
base = base>>1;
a = a - base;
res += 1<<shift;
}
return sign ? 0-res : res;
}
}
python
import sys;
class Solution(object):
def divide(self, dividend, divisor):
"""
:type dividend: int
:type divisor: int
:rtype: int
"""
# dividend/divisor
if divisor==0 or (dividend==-2147483648 and divisor==-1):
return 2147483647
if dividend==0:
return dividend
if dividend<0 and divisor>0 or dividend>0 and divisor<0:
sign=True
else:
sign=False
dividend=abs(dividend); divisor=abs(divisor)
result=0; i=0; a=1;index=[];base=[];
while divisor<=dividend:
index.append(a)
base.append(divisor)
divisor += divisor
a+=a
i+=1
i-=1
while i>=0:
if base[i]<=dividend:
result+=index[i]
dividend-=base[i]
i-=1
if sign:
return -result
else:
return result