29. Divide Two Integers

Divide two integers without using multiplication, division and mod operator.

If it is overflow, return MAX_INT.


public class Solution {
	public int divide (int dividend, int divisor) {
		final int MAX = 0x7fffffff, MIN = 0x80000000;
		if (divisor == 0 || (divisor == -1 && dividend == MIN))
			return MAX;
		int sign = (dividend >= 0 && divisor > 0 || dividend <=0 && divisor < 0) ? 1 : -1;
		
		dividend = dividend > 0 ? -dividend : dividend;
		divisor = divisor > 0 ? -divisor : divisor;
		if (dividend > divisor)
			return 0;
		if (divisor == -1)
			return sign == 1 ? -dividend : dividend;
		//前面都是对部分简单情况进行判断
		int res = 0;
		while (dividend <= divisor) {
			int divisorCurrent = divisor;
			int resCurrent = 1;
			while (divisorCurrent > dividend >> 1) {//除数是否大于被除数的二分之一
				divisorCurrent = divisorCurrent << 1;
				resCurrent = resCurrent << 1;
				//结果和除数分别扩大一倍
			}
			res += resCurrent;
			dividend -= divisorCurrent;
			//结果添加好之后,继续进行下一轮计算
		}
		return sign == 1 ? res : -res;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值