LeetCode 29. Divide Two Integers

来源:互联网 发布:aps.net程序员招聘 编辑:程序博客网 时间:2024/05/29 09:17

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();        }    }
原创粉丝点击