LeetCode 29. Divide Two Integers

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

If it is overflow, return MAX_INT.


没有使用移位,而是采取了小学竖式计算的原理

 public int divide(int dividend, int divisor) {

        long dividend_long = dividend;
        long divisor_long = divisor;
        int flag = 1;
        if (divisor_long == 0) {
            return Integer.MAX_VALUE;
        }
        if (divisor_long < 0) {
            divisor_long = -divisor_long;
            flag = flag * -1;
        }
        //分子转化成字符串
        String fenzi = String.valueOf(dividend_long);
        //处理负号
        if (fenzi.charAt(0) == '-') {
            fenzi = fenzi.substring(1);
            flag = flag *  -1;
        }
        //设置当前的左右游标
        int left = 0;
        int right = 1;
        int length = fenzi.length();
        StringBuffer sb = new StringBuffer();
        int yu = 0;
        while (right <= length) {
            long now = Integer.parseInt(fenzi.substring(left,right));//将当前要计算的字符串转化为数字
            now = now + yu * 10;
            long sum = 0;
            long result_now = 0;
            while ((sum + divisor_long) <= now) {
                sum += divisor_long;
                result_now++;
            }
            yu = (int)(now - sum);
            if (result_now == 0) {
                if (yu != 0) {
                    if (sb.length() != 0) {
                        sb.append(0);
                    }
                    left = right;
                    right++;

                } else {
                    sb.append(0);
                    left = right;
                    right ++;
                }

            } else {
                sb.append(result_now);
                left = right;
                right ++;
            }
        }
        if (sb.length() == 0) {
            return  0;
        }
        Long result =  flag * Long.parseLong(sb.toString());
        if (result > Integer.MAX_VALUE) {
            return Integer.MAX_VALUE;
        } else if (result < Integer.MIN_VALUE) {
            return Integer.MIN_VALUE;
        } else {
            return result.intValue();
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值