• 【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 }
  • 相关阅读:
    花匠
    积木
    Hello world
    老鼠走迷宫全部路径
    今天下午选做题目
    整数高精度运算——加法
    博客启航
    解线性不定方程
    关于完全背包问题
    关于最小代价子母树
  • 原文地址:https://www.cnblogs.com/fcyworld/p/6282293.html
Copyright © 2020-2023  润新知