29. 兩數(shù)相除

class Solution {
    public int divide(int dividend, int divisor) {
        int result = 0;
        boolean flag = false; 
        if(getsign(dividend) != getsign(divisor)){
            flag = true; //flag為true時(shí)表示除數(shù)與被除數(shù)符號(hào)不一樣
        }
        dividend = dividend > 0?-dividend:dividend; //將除數(shù)和被除數(shù)轉(zhuǎn)換為負(fù)數(shù)(為了防止最大值溢出, 所以不能轉(zhuǎn)換為正數(shù))
        divisor = divisor > 0?-divisor:divisor;

        int n = 31; //int 類型的最大位數(shù), 還有一位是符號(hào)位
        while(n >= 0){
            if((dividend>>n) <= divisor && (divisor<<n) >= dividend){ //(divisor<<n) >= dividend是用于判斷數(shù)字不是2的整倍數(shù)的時(shí)候?qū)е碌囊绯鰡?wèn)題
                dividend -= divisor<<n ;
                result -= 1<<n;
            }
            n--;
        }
        if(!flag){
            if(result == Integer.MIN_VALUE){
                return Integer.MAX_VALUE;
            }
            return -result;
        }
        return result;
    }

    public static boolean getsign(int num){
        if(num >= 0){
            return true;
        }
        return false;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容