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;
        }
  • 相关阅读:
    安装tomcat
    sed
    a'w'k
    dwr??
    tomcat-性能?
    windows清理命令
    markdown超链接怎么写?
    ※剑指offer系列19:二叉搜索树与双向链表
    剑指offer系列17:二叉搜索树的后序遍历序列
    剑指offer系列18:二叉树中和为某一值得路径
  • 原文地址:https://www.cnblogs.com/aboutblank/p/4515345.html
Copyright © 2011-2022 走看看