Given two integers dividend
and divisor
, divide two integers without using multiplication, division and mod operator.
Return the quotient after dividing dividend
by divisor
.
The integer division should truncate toward zero.
Example 1:
Input: dividend = 10, divisor = 3 Output: 3
Example 2:
Input: dividend = 7, divisor = -3 Output: -2
Note:
- Both dividend and divisor will be 32-bit signed integers.
- The divisor will never be 0.
- Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 231 − 1 when the division result overflows.
code:
public int divide(int dividend, int divisor) {
/*
long result=(long)dividend/divisor;
if(result>Integer.MAX_VALUE){
return Integer.MAX_VALUE;
}else if(result<Integer.MIN_VALUE){
return Integer.MIN_VALUE;
}else{
return (int)result;
}*/
if(divisor==0||dividend==Integer.MIN_VALUE&&divisor==-1) return Integer.MAX_VALUE;
int res=0;
int sign=(dividend<0)^(divisor<0)?-1:1;
long dvd=Math.abs((long)dividend);
long dvs=Math.abs((long)divisor);
while(dvs<=dvd){
long temp=dvs,mul=1;
while(dvd>=temp<<1){
temp<<=1;mul<<=1;
}
dvd-=temp;res+=mul;
}
return sign==1?res:-res;
}