zoukankan      html  css  js  c++  java
  • [LeetCode] #29 Divide Two Integers

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

    If it is overflow, return MAX_INT.

    本题是求除法,但是要注意int的边界值。时间:14ms,代码如下:

    class Solution {
    public:
        int divide(int dividend, int divisor) {
            if (divisor == 0 || dividend > INT_MAX || dividend < INT_MIN)
                return INT_MAX;
    
            long long res = 0;
            int flag = 1;
            if ((dividend<0 && divisor>0) || (dividend>0 && divisor<0))
                flag = -1;
    
            long long divid = abs((long long)dividend);
            long long divi = abs((long long)divisor);
            long long temp = 0;
            if (divid < divi)
                return 0;
            while (divi <= divid){
                long long cnt = 1;
                temp = divi;
    
                while ((temp <<= 1) <= divid){
                    cnt <<= 1;
                }
                res += cnt;
                divid -= (temp >> 1);
    
            }
            res = (res*flag);
            if (res >= INT_MAX)
                return INT_MAX;
            else if (res <= INT_MIN)
                return INT_MIN;
            return res;
        }
    };
    “If you give someone a program, you will frustrate them for a day; if you teach them how to program, you will frustrate them for a lifetime.”
  • 相关阅读:
    VTK 9.0.1 vtkContextDevice2D 问题
    VTK 中文
    VTK 剪切
    VTK Color Map
    VTK Camera
    VTK Light
    VTK Read Source Object
    VTK Procedural Source Object
    Qt 布局开发问题记录
    Grafana 系列 (7):圖表是否可以数据追踪 (drill down)?(转)
  • 原文地址:https://www.cnblogs.com/Scorpio989/p/4574324.html
Copyright © 2011-2022 走看看