Divide Two Integers

medium math bit manipulation

Problem

Given two integers dividend and divisor, divide them without using multiplication, division, or mod, truncating toward zero. Clamp the result to the signed 32-bit range.

Inputdividend = 10, divisor = 3
Output3
10 / 3 = 3.33… → truncated to 3.

def divide(dividend, divisor):
    INT_MAX, INT_MIN = (1 << 31) - 1, -(1 << 31)
    if dividend == INT_MIN and divisor == -1: return INT_MAX
    neg = (dividend < 0) ^ (divisor < 0)
    a, b = abs(dividend), abs(divisor)
    q = 0
    while a >= b:
        t, m = b, 1
        while a >= (t << 1):
            t <<= 1; m <<= 1
        a -= t; q += m
    return -q if neg else q
function divide(dividend, divisor) {
  const INT_MAX = 2 ** 31 - 1, INT_MIN = -(2 ** 31);
  if (dividend === INT_MIN && divisor === -1) return INT_MAX;
  const neg = (dividend < 0) !== (divisor < 0);
  let a = Math.abs(dividend), b = Math.abs(divisor);
  let q = 0;
  while (a >= b) {
    let t = b, m = 1;
    while (a >= t * 2) { t *= 2; m *= 2; }
    a -= t; q += m;
  }
  return neg ? -q : q;
}
class Solution {
    public int divide(int dividend, int divisor) {
        if (dividend == Integer.MIN_VALUE && divisor == -1) return Integer.MAX_VALUE;
        boolean neg = (dividend < 0) ^ (divisor < 0);
        long a = Math.abs((long) dividend), b = Math.abs((long) divisor);
        long q = 0;
        while (a >= b) {
            long t = b, m = 1;
            while (a >= (t << 1)) { t <<= 1; m <<= 1; }
            a -= t; q += m;
        }
        return (int) (neg ? -q : q);
    }
}
int divide(int dividend, int divisor) {
    if (dividend == INT_MIN && divisor == -1) return INT_MAX;
    bool neg = (dividend < 0) ^ (divisor < 0);
    long a = labs((long) dividend), b = labs((long) divisor);
    long q = 0;
    while (a >= b) {
        long t = b, m = 1;
        while (a >= (t << 1)) { t <<= 1; m <<= 1; }
        a -= t; q += m;
    }
    return (int) (neg ? -q : q);
}
Time: O(log² n) Space: O(1)