题目:
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
最直接的方法是,用加减法。除了加减乘除,我们还可以用的是,位算法。位算法可以使得计算速度更快。
答案:
class Solution {
public:
int divide(int dividend, int divisor) {
long long res = 0;
long long m = abs((long long)dividend), n = abs((long long) divisor);
if(m < n) return 0;
long long t = n, p = 1;
while(m > (t<<1)) {
t <<= 1;
p <<= 1;
}
res += p + divide(m-t, n);
if((dividend < 0)^(divisor < 0)) {
res = -res;
}
return res>INT_MAX ? INT_MAX:res;
}
};