1. 程式人生 > >Divide Two Integers

Divide Two Integers

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

Have you met this question in a real interview? Yes Example

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);
11
long 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