Divide Two Integers
阿新 • • 發佈:2017-08-10
btn button value param pan logs question math multipl
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return 2147483647
Given dividend = 100
and divisor = 9
, return 11
.
思路: 1.用減法來實現除法(都預先轉換成正數),用被除數 - 除數, 直到被除數 < 除數, 循環的次數即為商。 2. 為了加快速度,可以每次將除數 * 2,直到被除數 < 除數,同時記錄加倍的次數 。 3. 註意corner case, int 的最小值還是其本身,因此需要用long來暫存。
1 public class Solution { 2 /** 3 * @param dividend the dividend 4 * @param divisor the divisor 5 * @return the result 6 */ 7 public int divide(int dividend, int divisor) { 8 // Write your code here 9 long a = dividend; 10 a = Math.abs(a); 11long b = divisor; 12 b = Math.abs(b); 13 long result = 0; 14 while (a >= b) { 15 for (long tmp = b, count = 1; a >= tmp; tmp <<= 1, count <<= 1) { 16 a -= tmp; 17 result += count; 18 } 19 }20 result = (((dividend ^ divisor) >> 31 & 1) == 1) ? -result : result; 21 if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) { 22 return Integer.MAX_VALUE; 23 } 24 return (int)result; 25 } 26 }
Divide Two Integers