题目:Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
题目大意:不用乘法除法和取余运算符来完成除法运算。
思路:只能用减法咯。
a 除以 b
每次我们可以使用2分法来加速这个过程。每次减运算时对除数乘以2加倍,直到它比被除数还大为止。加倍的同时记录下a减完之后的值。
class Solution {
public:
int divide(int dividend, int divisor) {
long long a = dividend >= 0 ? dividend : -(long long) dividend;
long long b = divisor >= 0 ? divisor : -(long long) divisor;
long long result = 0, shift = 31;
while (shift >= 0) {
if (a >= b << shift) {
a -= b << shift;
result += 1LL << shift;
}
shift--;
}
result = ((dividend ^ divisor) >> 31) ? (-result) : (result);
if (result > INT32_MAX) return INT32_MAX;
else return result;
}
};