29. Divide Two Integers

9 篇文章 0 订阅
7 篇文章 0 订阅

题目:

Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT.

Java

public class Solution {
    public int divide(int dividend, int divisor) {
        /*思路:在dividend中不断减去divisor,计数。
        细节:要考虑负数情况,要提高效率,divisor不断乘2(位移操作)*/
        boolean sign = ((long)dividend*(long)divisor<0);
        long a = Math.abs((long)dividend);//考虑溢出
        long b = Math.abs((long)divisor);
        int res=0;
        while(a>=b){
            long base = b; int shift=-1;
            while(base<=a){
                base = base<<1;
                shift++;
            }
            base = base>>1;
            a = a - base;
            res += 1<<shift;
        }
        return sign ? 0-res : res;
    }
}


python

import sys;
class Solution(object):
    def divide(self, dividend, divisor):
        """
        :type dividend: int
        :type divisor: int
        :rtype: int
        """
        # dividend/divisor
        if divisor==0 or (dividend==-2147483648 and divisor==-1): 
            return 2147483647
        if dividend==0: 
            return dividend
        if dividend<0 and divisor>0 or dividend>0 and divisor<0:
            sign=True
        else:
            sign=False
        dividend=abs(dividend); divisor=abs(divisor)
        result=0; i=0; a=1;index=[];base=[];
        
        while divisor<=dividend:
            index.append(a)
            base.append(divisor)
            divisor += divisor
            a+=a
            i+=1
        i-=1
        while i>=0:
            if base[i]<=dividend:
                result+=index[i]
                dividend-=base[i]
            i-=1
            
        if sign:
            return -result
        else:
            return result


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值