function divide(dividend: number, divisor: number): number {
    const INT_MAX = Math.pow(2, 31) - 1;
    const INT_MIN = -Math.pow(2, 31);

    if (dividend === INT_MIN && divisor === -1) {
        return INT_MAX;
    }

    const isNegative = (dividend < 0) !== (divisor < 0);

    let dvd = Math.abs(dividend);
    let dvs = Math.abs(divisor);

    let ans = 0;
    while (dvd >= dvs) {
        let temp = dvs;
        let mult = 1;
        while ((temp << 1) > 0 && (temp << 1) <= dvd) {
            temp = temp << 1;
            mult = mult << 1;
        }
        dvd -= temp;
        ans += mult;
    }

    if (isNegative) {
        ans = -ans;
    }
    if (ans < INT_MIN) return INT_MIN;
    if (ans > INT_MAX) return INT_MAX;
    return ans;
};