zoukankan      html  css  js  c++  java
  • Divide Two Integers —— LeetCode

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

    If it is overflow, return MAX_INT.

    题目大意:不用乘除取模运算计算两个数的除。

    解题思路:只能用位运算了,当被除数大于除数,除数左移1位、2位……直到得到最大的然后用被除数减去它,将因数加到res上,这里有点二分的意思,依次循环往复,这里我把两个数都设为负数,因为0x80000000是最小的负数,它没有对应的最大正数。结果的正负由两个的符号决定,记录一个negFlag。代码感觉写的不够优雅,但是目前也就能写成这样了。

        public int divide(int dividend, int divisor) {
            //overflow
            if (divisor == 0 || (dividend == Integer.MIN_VALUE && divisor == -1)) {
                return 0x7fffffff;
            }
            if (dividend == 0) {
                return 0;
            }
            int res = 0;
            boolean negFlag = (dividend ^ divisor) < 0;
            dividend = dividend < 0 ? dividend : -dividend;
            divisor = divisor < 0 ? divisor : -divisor;
            while (dividend <= divisor) {
                int offset = 0;
                int tmp = divisor;
                while (dividend <= tmp) {
                    tmp = divisor << offset;
                    offset++;
                    if (tmp < (Integer.MIN_VALUE >> 1)) {
                        break;
                    }
                }
                offset -= 2;
                tmp >>= 1;
                dividend -= tmp;
                res += (1 << offset);
                if (offset == -1) {
                    res = 1;
                } else if (offset == -2) {
                    res = 0;
                }
            }
            return negFlag ? -res : res;
        }
  • 相关阅读:
    一个有趣的C语言问题
    PHP 管理树莓派
    JeeSite | 保存信息修改记录封装
    SQL Server学习内容(一)
    Java面试题大汇总
    Spring框架快速入门
    单例模式
    简要分析一下java中线程的生命周期
    mybatis中的高级查询
    mybatis中的分页插件
  • 原文地址:https://www.cnblogs.com/aboutblank/p/4515345.html
Copyright © 2011-2022 走看看