class Solution {
public:
int divide(int dividend, int divisor) {
if (divisor == INT_MIN) {
if (dividend == INT_MIN)return 1;
else return 0;
}
int flag = 1, fix = 0;
if (dividend == INT_MIN) {
if (divisor == 1)return INT_MIN;
else if (divisor == -1)return INT_MAX;
dividend = INT_MAX;
divisor = -divisor;
fix = 1;
}
if (dividend > 0 && divisor < 0) {
divisor = -divisor;
flag = -1;
}
else if (dividend < 0 && divisor > 0) {
dividend = -dividend;
flag = -1;
}
else if (dividend < 0 && divisor < 0) {
dividend = -dividend;
divisor = -divisor;
}
if (divisor > dividend)return 0;
int result = 1 + iteration(dividend - divisor + fix, 1, divisor, divisor);
return result * flag;
}
int iteration(int divide, int result, int now, int base) {
if (divide < base) return 0;
else if (now > divide) return iteration(divide, 1, base, base);
else if (now <= divide) return result + iteration(divide - now, result << 1, now << 1, base);
return 0;
}
};