leetcode 29. Divide Two Integers

不用乘号、除号和取模来实现除法。

思路:通过移位来进行计算被除数可以减去多少次的除数。

class Solution {
public:
    int divide(int dividend, int divisor) {
        if(dividend==INT_MIN&&divisor==-1)return INT_MAX;
        long long a=labs(dividend),b=labs(divisor),res=0;
        int s=(dividend>0)^(divisor>0)?-1:1;
        while(a>=b){
            long long tmp=b,m=1;
            while(tmp<<1 <= a){
                tmp<<=1;
                m<<=1;
            }
            a-=tmp;
            res+=m;
        }
        return res*s;
    }
};
posted @ 2020-07-23 09:45  winechord  阅读(54)  评论(0编辑  收藏  举报