Divide Two Integers

解题思路:
https://leetcode.com/problems/divide-two-integers/#/description

题目:
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.

解题思路:
这道题需要考虑corner case:dividend如果是0,直接返回0;如果divisor是0,那就看dividend是正数还是负数;然后还有当dividend是负无穷,divisor是-1的时候,要返回正无穷。然后就是要用bit操作来进行shift,每次更新rst。


代码:



public int divide(int dividend, int divisor) {
    if(dividend == 0){
        return 0;
    }
    if(divisor == 0){
        return dividend > 0 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
    }
    if(dividend == Integer.MIN_VALUE && divisor == -1){
        return Integer.MAX_VALUE;
    }
    boolean isNegative = (dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0);
    long a = Math.abs((long)dividend), b = Math.abs((long)divisor);
    int rst = 0;
    while(a >= b){
        int shift = 0;
        while(a >= (b << shift)){
            shift++;
        }
        a -= (b << (shift - 1));
        rst += (1 << (shift - 1));
    }
    return isNegative ? -rst : rst;
}


Comments

Popular Posts