码迷,mamicode.com
首页 > 其他好文 > 详细

【LeetCode】29. Divide Two Integers

时间:2017-01-13 14:01:15      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:除法   turn   产生   题意   color   nbsp   tail   else   details   

题意:不用乘除求余运算,计算除法,溢出返回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

标签:除法   turn   产生   题意   color   nbsp   tail   else   details   

原文地址:http://www.cnblogs.com/fcyworld/p/6282293.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!