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.
class Solution {
//不能用除法和取模运算,返回除法运算结果
public int divide(int dividend, int divisor) {
if(dividend==Integer.MIN_VALUE&&divisor==-1) return Integer.MAX_VALUE;//唯一会造成溢出的运算结果
//if(dividend==0) return 0;//分子为0
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;
int mul = 1;
while(dvd>=temp<<1){
temp<<=1;
mul<<=1;
}
dvd -= temp;
res += mul;
}
return sign==1?res:-res;
}
}