
Даны два целых числа dividend (делимое) и divisor (делитель).
Нужно разделить делимое на делитель без использования оператора умножения, деления и mod.
Целочисленное деление должно быть усечено до нуля, что означает потерю его дробной части. Например, 8.345 было бы усечено до 8, а -2.7335 было бы усечено до -2.
Верните частное после деления делимого на делитель.
Примечание: Предположим, мы имеем дело со средой, которая может хранить только целые числа в пределах 32-разрядного диапазона целых чисел со знаком: [-2^31, 2^31 − 1]. Для этой задачи, если частное строго больше 2^31 - 1, то верните 2^31 - 1, а если частное строго меньше -2^31, то верните -2^31.
Входные данные: dividend = 10, divisor = 3
Результат: 3
Пояснение: 10/3 = 3.33333, ответ усекается до 3.
Входные данные: dividend = 7, divisor = -3
Результат: -2
Пояснение: 7/-3 = -2.33333, ответ усекается до -2.
class Solution {
public:
    int divide(int dividend, int divisor) {
        if(dividend == INT_MIN && divisor == -1){
            return INT_MAX;
        } else if(divisor == 1) {
            return dividend; 
        }
        int sign = ((dividend < 0) != (divisor < 0)) ? -1 : 1;
        long result = 0;
        long a = abs(dividend);
        long b = abs(divisor);
        while(a >= b){
            long long temp = b, mul = 1;
            while(temp << 1 <= a){
                temp <<= 1;
                mul <<= 1;
            }
            a -= temp;
            result += mul;
        }
        return sign * result;
    }
};