LeetCode: Divide Two Integers

思路:网上借鉴的方法,二分法。就是将除数每次扩大2倍,直到大于被除数,此时是一部分倍数,将被除数减去最近一次的新除数(<被除数),累积所有的倍数,得到结果。注意,int边界问题,中间过程最好用long long保存结果,注意abs(INT_MIN) = INT_MIN < 0,在这个小bug上弄了很久,T_T!

class Solution {
public:
    int divide(int dividend, int divisor) {

		if(dividend==0) return 0;
        int isNegative = 1;
        if((dividend < 0 && divisor>0) || (dividend > 0 && divisor<0)) isNegative = -1;
		long long dividend_2 = dividend, divisor_2 = divisor, mulriple; 
		dividend_2 = abs(dividend_2);
		divisor_2 = abs(divisor_2);
		int ret = 0;
		while(dividend_2 > 0){
			mulriple = 1;
			long long tempDivisor = abs(divisor_2);
			while(dividend_2 >= tempDivisor){
				mulriple <<= 1;
				tempDivisor <<= 1;
			}
			tempDivisor >>= 1;
			mulriple >>= 1;
			dividend_2 -= tempDivisor;
			ret += mulriple;
			
		}
		return ret * isNegative;
    }
};


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