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) {
if (dividend == 0)
return 0;
long long m = abs((long long)dividend);
long long n = abs((long long)divisor);
bool flag = (dividend > 0) ^ (divisor > 0);
long long res = 0;
while (m >= n){
long long temp = 1;
long long a = n;
while ((a << 1) < m){
a <<= 1;
temp <<= 1;
}
res += temp;
m -= a;
}
if (!flag){
if (res > INT_MAX)
return INT_MAX;
return res;
}
if (res > INT_MAX)
return INT_MIN;
return -res;
}
};