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)); } }
