Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
Math Binary Searchclass Solution {
public:
int divide(int dividend, int divisor) {
long long abDividend = dividend;
long long abDivisor = divisor;
bool positive = (dividend>>31==divisor>>31);
if (divisor == 0)
return INT_MAX;
abDividend = abs(abDividend);
abDivisor = abs(abDivisor);
if(abDividend<abDivisor) return 0;
int digi = 0;
while(abDivisor<<1 <= abDividend){
abDivisor<<=1;
digi++;
}
int result=0;
if(digi>=31&&positive) return INT_MAX;
while(digi>=0){
if(abDividend==0) break;
if(abDividend>=abDivisor){
abDividend -= abDivisor;
result += (1<<digi);
}
else{
abDivisor >>=1;
digi--;
}
}
return positive?result:(-result);
}
};