zoukankan      html  css  js  c++  java
  • [leetcode]Divide Two Integers

    直接用除数去一个一个加,直到被除数被超过的话,会超时。

    解决办法每次将被除数增加1倍,同时将count也增加一倍,如果超过了被除数,那么用被除数减去当前和再继续本操作。

    #include <iostream>
    #include <vector>
    #include <string>
    using namespace std;
    
    class Solution {
    public:
        int divide(int dividend, int divisor) {
            // Start typing your C/C++ solution below
            // DO NOT write int main() function
    
            if (dividend == 0 || divisor == 0)
                return 0;
    
            int nega = 0;
            if ((dividend>0&&divisor<0) || (dividend<0&&divisor>0))
                nega = 1;
            
            long long c = dividend;    //先用两个long long来存一下,不然下面abs(-2147483648)会溢出,因为正数int只能到2147483647
            long long d = divisor;
            long long a = abs(c);
            long long b = abs(d);
    
            if (b > a)
                return 0;
    
            long long sum = 0;
            int count = 0;
            int final = 0;
            while (a >= b)
            {
                count = 1;                //a >= b保证了最少有一个count
                sum = b;
                while (sum + sum <= a){    //!!
                    sum += sum;
                    count += count;
                }
                a -= sum;
                final += count;
            }
    
            if (nega)
                final = 0 - final;
    
            return final;
        }
    };
    
    int main()
    {
        int dividend = 2147483647;
        int divisor = 2;
        Solution s;
        cout<<s.divide(dividend, divisor)<<endl;
        return 0;
    }

    EOF

  • 相关阅读:
    go引入包一直是红色,没有引入的解决办法
    php 把抛出错误记录到日志中
    亚马逊查询接口
    git 合并指定文件到另一个分支
    content-type
    Echarts(饼图Pie)
    DIN 模型速记
    DeepFM 要点速记
    youtube DNN 模型要点速记
    java设计模式之迭代器
  • 原文地址:https://www.cnblogs.com/lihaozy/p/2840070.html
Copyright © 2011-2022 走看看