LeetCode 29 Divide Two Integers (不使用乘法,除法,求模計算兩個數的除法)


 
Problem :不使用乘法,除法,求模計算兩個數的除法~
 
除法運算:被除數中包含有多少個除數的計算
 
由於是int類型的除法,因此結果可能超過int的最大值,當超過int的最大值時輸出int的最大值
 
另寫除法函數,計算出除法的商。
首先判斷出除法運算后的結果是正數還是負數。
之后需要將被除數和除數都變為正數,進行進一步計算
當被除數小於除數時,返回0
否則,進入循環體,判斷被除數包含多少個除數(這里的個數是2的整數倍)
 
返回結果需要查看是正數還是負數,記得加上正負號
 
參考代碼 :
 
package leetcode_50;


/***
 * 
 * @author pengfei_zheng
 * 不使用乘法、除法、求模實現除法運算
 */
public class Solution29 {
    public int divide(int dividend, int divisor) {
        long result = divideLong(dividend, divisor);
        return result > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int)result;
    }

    // It's easy to handle edge cases when
    // operate with long numbers rather than int
    public long divideLong(long dividend, long divisor) {
        
        // Remember the sign
        boolean negative = dividend < 0 != divisor < 0;
        
        // Make dividend and divisor unsign
        if (dividend < 0) dividend = -dividend;
        if (divisor < 0) divisor = -divisor;
        
        // Return if nothing to divide
        if (dividend < divisor) return 0;
        
        // Sum divisor 2, 4, 8, 16, 32 .... times
        long sum = divisor;
        long divide = 1;
        while ((sum+sum) <= dividend) {
            sum += sum;
            divide += divide;
        }
        
        // Make a recursive call for (devided-sum) and add it to the result
        return negative ? -(divide + divideLong((dividend-sum), divisor)) :
            (divide + divideLong((dividend-sum), divisor));
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM