zoukankan      html  css  js  c++  java
  • 29. Divide Two Integers

    Divide two integers without using multiplication, division and mod operator.

    If it is overflow, return MAX_INT.

    两个数相除,不使用乘法,除法,求模计算两个数的除法~

    除法运算:被除数中包含有多少个除数的计算
     
    由于是int类型的除法,因此结果可能超过int的最大值,当超过int的最大值时输出int的最大值
     
    计算商:
    1、判断除法运算后的结果正负。
    2、将被除数和除数都变为正数,便于计算计算
    3、当被除数小于除数时,返回0
      否则,进入循环体;
    4、循环体是:判断被除数包含多少个除数(用到了移位的方法,所以这里的个数是2的整数倍)
     
    class Solution {
    public:
        int divide(int dividend, int divisor) {
            if (!divisor || (dividend == INT_MIN && divisor == -1))
                return INT_MAX;
            int sign = ((dividend < 0) ^ (divisor < 0)) ? -1 : 1; //表示符号
            long long dvd = labs(dividend);  //labs求绝对值的(和abs函数一样,只是abs针对int类型的,而labs针对long类型的)
            long long dvs = labs(divisor);
            int res = 0; //
            while (dvd >= dvs) { 
                long long temp = dvs, multiple = 1;
                while (dvd >= (temp << 1)) {  //循环条件为temp左移一位(相当于乘上2)之后小于被除数
                    temp <<= 1;    //temp左移一位
                    multiple <<= 1;   //multiple左移一位(除数左移,商也左移)
                }
                dvd -= temp;  
                res += multiple;
            }
            return sign == 1 ? res : -res; 
        }
    };
  • 相关阅读:
    Action直接访问Servlet API
    Struts2与Struts1的对比
    参入github上的开源项目的步骤
    TortoiseSVN中图标的含义
    eclipse 快捷键
    base(function strchr)
    1
    Java 关于路径
    java初阶
    关于C++中计时的方法
  • 原文地址:https://www.cnblogs.com/hozhangel/p/7835307.html
Copyright © 2011-2022 走看看