• 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;
        }
  • 相关阅读:
    使用DBCP时发生AbstractMethodError异常
    Android NDK 环境搭建 + 测试例程
    一个关于含有显式实参的虚函数调用问题解释
    cookie和session
    hello
    python 多线程多进程
    python 网络编程
    docker 制作镜像
    docker 数据卷存储
    docker 简单原理及相关命令(镜像拉取 删除 执行容器 进入容器)
  • 原文地址:https://www.cnblogs.com/aboutblank/p/4515345.html
Copyright © 2020-2023  润新知