[lintcode]414. 两个整数相除

链接:https://www.lintcode.com/zh-cn/problem/divide-two-integers/


将两个整数相除,要求不使用乘法、除法和 mod 运算符。

如果溢出,返回 2147483647 。

样例

给定被除数 = 100 ,除数 = 9,返回 11

class Solution {  
public:  
    /** 
     * @param dividend the dividend 
     * @param divisor the divisor 
     * @return the result 
     */  
    int divide(int dividend, int divisor) {  
        // Write your code here  
        bool resultGreatThanZero = true;  
        if(dividend>0&&divisor<0||dividend<0&&divisor>0)  
            resultGreatThanZero = false;  
        long long ret = 0;  
        long long d1 = abs((long long)dividend);  
        long long d2 = abs((long long)divisor);  
        while(d1>=d2)  
        {  
            long long temp = d2;  
            long long cnt = 1;  
            while(d1>=temp)  
            {  
                d1-=temp;  
                ret+=cnt;  
                cnt = cnt<<1;  
                temp = temp<<1;  
            }  
        }  
        if(!resultGreatThanZero)  
            ret*=-1;  
        if(ret<(long long)INT_MIN||ret>(long long)INT_MAX)  
            return INT_MAX;  
        return ret;  
    }  
};  


猜你喜欢

转载自blog.csdn.net/xiaocong1990/article/details/80186840