JasonChang

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

特殊值可先判断并返回 很重要

本题是通过左移代替乘法产生不同的除数, 然后做减法得到解。

 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 }

 

posted on 2013-11-03 12:58  JasonChang  阅读(299)  评论(0编辑  收藏  举报