Divide two integers without using multiplication, division and mod operator.
class Solution {
public:
int divide(int dividend, int divisor) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if (dividend == 0)
return 0;
bool sign = dividend < 0 ? (divisor < 0 ? false : true) : (divisor < 0 ? true : false);
unsigned int a = dividend < 0 ? -dividend : dividend;
unsigned int b = divisor < 0 ? -divisor : divisor;
//cout << dividend << " / " << divisor << endl;
if (b == 1)
return sign ? -a : a;
if (a < b)
return 0;
unsigned int factor = b;
int sub_cnt = 0;
while (a > factor) {
factor <<=1;
++sub_cnt;
}
unsigned int res = 0;
while (sub_cnt >= 0) {
if (a >= factor) {
res += (1 << sub_cnt);
a -= factor;
}
factor >>= 1;
--sub_cnt;
}
return sign ? -res : res;
}
};