leetcode 29两数相除

我理解本题是考察基于加减实现除法,代码如下:

class Solution {
public:
    //只用加减号实现除法,
    //不用加减号实现除法;
    int divide(int dividend, int divisor) {
    //
        if(dividend==INT_MIN&&divisor==-1){
            return INT_MAX;
        }
        long dvd=labs(dividend);long dvs=labs(divisor);long ans=0;
        int sign=dividend^divisor;
        for(int i=31;i>=0;i--){
            if((dvd>>i)>=dvs){
                dvd-=dvs<<i;
                ans+=1<<i;
            }
        }
        if(sign<0)
            ans=-ans;
        return ans;
    }

};

 如果单纯基于位运算呢?加减也依靠位运算如何避免溢出?

猜你喜欢

转载自www.cnblogs.com/joelwang/p/10949221.html
今日推荐