Leetcode学习笔记(29. 两数相除)

在这里插入图片描述
递归加移位思想,困住我的竟然是边界溢出值,要哭了:

class Solution {
private:
	int function(long num, long divisor) {
		if (num<divisor)
			return 0;
		long long time = 1;
		long long temp = divisor;
		while (num >= temp) {
			temp = temp << 1;
			time = time << 1;
		}
		time = time >> 1;
		return time + function(num - (temp >> 1), divisor);
	}
public:
	int divide(long dividend, long divisor) {
		if(divisor == 1) return dividend;
        if(divisor == -1){
            if(dividend>INT_MIN) return -dividend;
            return INT_MAX;
        }
		static_cast<long>(dividend);
		static_cast<long>(divisor);
		bool div1 = false, div2 = false;
		if (dividend<0) {
			dividend = -dividend;
			div1 = true;
		}
		if (divisor<0) {
			divisor = -divisor;
			div2 = true;
		}
		if (div1 == div2)
			return function(dividend, divisor);
		else
			return -function(dividend, divisor);
	}
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值