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;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值