特殊值可先判断并返回 很重要
本题是通过左移代替乘法产生不同的除数, 然后做减法得到解。
1 public class Solution { 2 public int divide(int dividend, int divisor) { 3 // IMPORTANT: Please reset any member data you declared, as 4 // the same Solution instance will be reused for each test case. 5 if(dividend == 0) 6 return 0; 7 if(divisor == 1) 8 return dividend; 9 boolean negative = false; 10 if(dividend < 0 && divisor > 0) 11 negative = true; 12 if(dividend > 0 && divisor < 0) 13 negative = true; 14 long[] mydivisor = new long[32]; 15 long ldivisor = (long)Math.abs((long)divisor); 16 long ldividend = (long)Math.abs((long)dividend); 17 int i = 0; 18 while(i < 32) 19 { 20 if(ldividend >= ldivisor) 21 { 22 mydivisor[i] = ldivisor; 23 ldivisor <<= 1; 24 } 25 else 26 { 27 i--; 28 break; 29 } 30 i++; 31 } 32 33 int result = 0; 34 while(i>=0) 35 { 36 if(ldividend - mydivisor[i] >= 0) 37 { 38 ldividend -= mydivisor[i]; 39 result += (1<<i); 40 } 41 else 42 { 43 i--; 44 } 45 } 46 if(negative) 47 return ~result + 1; 48 else 49 return result; 50 } 51 }