首页 > 代码库 > 【LeetCode】29. Divide Two Integers

【LeetCode】29. Divide Two Integers

题意:不用乘除求余运算,计算除法,溢出返回INT_MAX。

  首先考虑边界条件,什么条件下会产生溢出?只有一种情况,即返回值为INT_MAX+1的时候。

  不用乘除求余怎么做?

  一.利用减法。

    耗时太长,如果被除数是INT_MIN,除数是1的时候,要循环-INT_MIN次

  二.利用位运算

  思路来自:http://blog.csdn.net/whuwangyi/article/details/40995863

  代码:

      

 1 int divide(int dividend, int divisor) {
 2     int i=0;
 3     long ret=0;
 4     int flag=1;
 5     long dividend_copy=dividend;
 6     long divisor_copy=divisor;
 7     if((dividend<0&&divisor>0)||(dividend>0&&divisor<0))
 8         flag=-1;
 9     dividend_copy=dividend<0?((-1)*dividend_copy):dividend_copy;
10     divisor_copy=divisor<0?((-1)*divisor_copy):divisor_copy;
11     while(dividend_copy>=divisor_copy<<1){
12         divisor_copy<<=1;
13         i++;
14     }
15     while(i>=0){
16         if(dividend_copy>=divisor_copy){
17             dividend_copy-=divisor_copy;
18             ret+=1<<i;
19         }
20         i--;
21         divisor_copy>>=1;
22     }
23     ret = (flag<0)?((-1)*ret):ret;
24     if(ret==INT_MAX+1)
25         return INT_MAX;
26     else
27         return (int)ret;
28 }

 

【LeetCode】29. Divide Two Integers