1. 程式人生 > 其它 >力扣29. 兩數相除

力扣29. 兩數相除

技術標籤:java

class Solution {
    public int divide(int dividend, int divisor) {
        if(divisor == 1) return dividend;
        if(divisor == -1 && dividend == Integer.MIN_VALUE){//Integer.MIN_VALUE
            return Integer.MAX_VALUE;
        }
        if(divisor < 0 && dividend <
0){ return divide(-(long)dividend, -(long)divisor); } else if(dividend < 0 || divisor < 0){ return -divide(Math.abs((long)dividend), Math.abs((long)divisor));//負號必須放前面 } else return divide((long)dividend, (long)divisor); } public int
divide(long dividend, long divisor){ if (dividend < divisor) { return 0; } int count = 1; long sum = divisor; while(dividend >= sum){ sum <<= 1; count <<= 1; } sum >>>= 1;//對正數而言,無符號和有符號右移沒有區別
count >>>= 1;//為什麼是無符號右移 return count + divide(dividend - sum, divisor); } }

無符號右移:注意負數為整數的補碼:先反碼再+1
在這裡插入圖片描述