• 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; 
        }
    };
  • 相关阅读:
    java实现还款计算
    java实现风险度量
    java实现字符串比较
    java实现风险度量
    java实现风险度量
    java实现还款计算
    java实现还款计算
    java实现字符串比较
    java实现字符串比较
    java实现风险度量
  • 原文地址:https://www.cnblogs.com/hozhangel/p/7835307.html
Copyright © 2020-2023  润新知