LeetCode—29. Divide Two Integers

Type:medium

Given two integers dividend and divisor, divide two integers without using multiplication, division and mod operator.

Return the quotient after dividing dividend by divisor.

The integer division should truncate toward zero.

Example 1:

Input:dividend = 10, divisor = 3Output:3

Example 2:

Input:dividend = 7, divisor = -3Output:-2


这道题是求商,但是不允许用*、/、%三种运算符号。

最初我用了最简单的方法,被除数每次减去除数,结果超时,只能换方法。。。

利用竖式法则,按位除。首先设临时变量a为除数的值,m为1,将a、m不停左移,直至下一次左移会大于被除数的值。此时a加上余数等于被除数,m*除数等于a。记录m,将被除数减去a,对这个余数继续对除数进行操作。

同时要注意当被除数是INT_MIN,除数是-1时,返回的值是INT_MAX。


class Solution {

public:

    typedef long long ll;

    int divide(int n_, int d_) {

        if(n_ == INT_MIN && d_ == -1) return INT_MAX;

        ll ans=0;

        ll n=abs((ll)n_);

        ll d=abs((ll)d_);

        while(n>=d){

            ll a=d;

            ll m=1;

            while((a<<1) < n){a<<=1;m<<=1;}

            ans+=m;

            n-=a;

        }

        if((n_<0&&d_>=0)||(n_>=0&&d_<0))

            return -ans;

        return ans;

    }

};

你可能感兴趣的:(LeetCode—29. Divide Two Integers)