Divide Two Integers

思路:不能单步减法,时间会超时。当第一次减完后被减数仍大减数,这时减数可采用2的指数增加,直到大于被减数后,被减数缩小,再次重新这个过程。

注意调试时,出现的错误:

int dividend = -2147483648;

long b=-dividend;(其实b仍等于 -2147483648,因为右边-dividend其实已经运算过后,越界后的值赋给左边)

 

 

还有循环内的b,count 仍要为long型,因为可能相加过后越界。

 

 1 class Solution {
 2 public:
 3     int divide(int dividend, int divisor) {
 4         int MAX_INT=2147483647;
 5         if(divisor==0||(dividend==-(MAX_INT+1)&&divisor==-1)) return MAX_INT;
 6         if(dividend==0) return 0;
 7         int flag=1,count=1,a;
 8         long long dend=dividend;
 9         long long sor=divisor;
10         long long b;
11         int quotient=0;
12         if(dividend<0){ flag=-flag; dend=-dend;}
13         if(divisor<0){ flag=-flag; sor= -sor;}
14         if(dend<sor) return 0;
15         while(dend>=sor)
16         {
17             count=1;
18             b=sor;
19             while(b+b<=dend)
20             {
21                 b+=b;
22                 count+=count;
23             }
24             dend-=b;
25             quotient+=count;
26         }
27         if(flag<0) quotient=-quotient;
28         return quotient;
29     }
30 };

 

posted on 2016-03-11 14:28  RenewDo  阅读(184)  评论(0编辑  收藏  举报

导航