Divide two integers without using multiplication, division and mod operator.
class
Solution {
public
:
int
divide(
int
dividend,
int
divisor) {
if
(divisor == 0)
return
0;
if
(divisor == 1)
return
dividend;
if
(dividend == divisor)
return
1;
if
(divisor == 2)
return
dividend >> 1;
bool
sign =
false
;
if
( (dividend > 0 && divisor < 0) ||
(dividend < 0 && divisor > 0))
sign =
true
;
if
(dividend == numeric_limits<
int
>::max()
&& divisor == numeric_limits<
int
>::min())
return
0;
dividend = dividend == numeric_limits<
int
>::min() ?
numeric_limits<
int
>::max() :
abs
(dividend);
divisor = divisor == numeric_limits<
int
>::min() ?
numeric_limits<
int
>::max() :
abs
(divisor);
int
result = (
int
)
floor
(
exp
(
log
(dividend) -
log
(divisor)));
return
sign ? -result : result;
}
};