29. 两数相除

class Solution {

    //倍增思想
    public int divide(int dividend, int divisor) {
        if(dividend == 0) return 0;
        if(dividend == Integer.MIN_VALUE && divisor == - 1) {
            return Integer.MAX_VALUE;
        }               // 两数异或结果小于0为异号,大于等于0为同号
        int atoi = (dividend ^ divisor) < 0 ? -1 : 1;
        long t = Math.abs((long)dividend);
        long d = Math.abs((long)divisor);
        int res = 0;
        for(int i = 31; i >= 0; i--) {
            if((t>>i) >= d) {  // 每次找出足够大的数2^n*divisor
                res += 1 << i; //将结果加上2^n
                t -= d << i; //将被除数减去2^n*divisor
            }
        }
        return atoi * res;
    }
}

 

 
posted @ 2020-07-08 20:51  Sexyomaru  阅读(227)  评论(0编辑  收藏  举报