zoukankan      html  css  js  c++  java
  • 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 };
  • 相关阅读:
    js计算两个时间相差天数
    享元模式
    外观模式
    组合模式
    装饰者模式
    桥接模式
    适配器模式
    元素量词 ? + *
    linux安装使用7zip
    linux shell使用别名,切换当前目录
  • 原文地址:https://www.cnblogs.com/daocaorenblog/p/5265547.html
Copyright © 2011-2022 走看看