29 - Divide Two Integers

 JAVA

  • class Solution {
        public int divide(int a, int b) {
            if (b == 1) {
                return a;
            }
            if (a == Integer.MIN_VALUE && b == -1) {
                return Integer.MAX_VALUE;
            }
            boolean sign = (a > 0 && b > 0) || (a < 0 && b < 0);
            a = a > 0 ? -a : a;
            b = b > 0 ? -b : b;
            int ans = 0;
            while (a <= b) {
                int x = b;
                int cnt = 1;
                while (x >= (Integer.MIN_VALUE >> 1) && a <= (x << 1)) {
                    x <<= 1;
                    cnt <<= 1;
                }
                ans += cnt;
                a -= x;
            }
            return sign ? ans : -ans;
        }
    }

C++

  • class Solution {
    public:
        int divide(int a, int b) {
            if (b == 1) {
                return a;
            }
            if (a == INT_MIN && b == -1) {
                return INT_MAX;
            }
            bool sign = (a > 0 && b > 0) || (a < 0 && b < 0);
            a = a > 0 ? -a : a;
            b = b > 0 ? -b : b;
            int ans = 0;
            while (a <= b) {
                int x = b;
                int cnt = 1;
                while (x >= (INT_MIN >> 1) && a <= (x << 1)) {
                    x <<= 1;
                    cnt <<= 1;
                }
                ans += cnt;
                a -= x;
            }
            return sign ? ans : -ans;
        }
    };

Comments