Divide Two Integers

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


思路:注意越界问题。

比如:

 -2147483648/1=-2147483648
 -2147483648/-1=2147483647

最主要的应该是如何进行除法吧,思路如下:a/b,a-b --  a-2*b -- a-2*2*b,不断的迭代,设置一个while循环。

一开始b赋值给c,在接下来的循环里for(int i=0;a>=c;i++,c<<1)

A每次减去c,c每次自己乘以2,代表了每次里面都有2个c,

尽管c每次乘以2,但是对于所以result每次都是需要进行(1<<i),代表第i次多少个c,a<c结束。

下次继续循环


代码:

typedef long long ll;
class Solution {
public:
//https://leetcode.com/problems/divide-two-integers/
    int divide(int dividend, int divisor) {
        ll a = dividend >= 0 ? dividend : -(ll)dividend;
        ll b = divisor >= 0 ? divisor : -(ll)divisor;
        ll result = 0, c = 0;
        bool sign = (dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0);

        while(a>=b){
            c=b;
            for(int i=0;a>=c;i++,c<<=1){//c<<suoy=1,每一次这个操作就会使得除数*2。因为他是迭代的,
                                        //所以循环内部是+(1<<i)-->代表多少个倍数的除数。
                a=a-c;
                result=result+(1<<i);
            }
        }
        if (sign) {
            return max((ll)INT_MIN, -result);
        } else {
            return min((ll)INT_MAX, result);
        }
    }
};


原文地址:https://www.cnblogs.com/jsrgfjz/p/8519911.html