• Java实现 LeetCode 29 两数相除


    29. 两数相除

    给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。

    返回被除数 dividend 除以除数 divisor 得到的商。

    示例 1:

    输入: dividend = 10, divisor = 3
    输出: 3
    示例 2:

    输入: dividend = 7, divisor = -3
    输出: -2
    说明:

    被除数和除数均为 32 位有符号整数。
    除数不为 0。
    假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。本题中,如果除法结果溢出,则返回 231 − 1。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/divide-two-integers
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    PS:使用对数

    class Solution {
        public int divide(int dividend, int divisor) {
             if (divisor == 1) {
                return dividend;
            }
            double dividendDou = (double) dividend;
            double divisorDou = (double) divisor;
            double logAns = Math.log(Math.abs(dividendDou)) - Math.log(Math.abs(divisorDou));
            double answer = Math.exp(logAns);
            if ((dividend < 0 && divisor > 0) || (dividend > 0 && divisor < 0)) {
                answer = -answer;
            }
            return (int) answer;
        }
    }
    

    PS:这个方法是除法

    class Solution {
        public int divide(int dividend, int divisor) {
             if (dividend == 0) {
                return 0;
            }
            if (dividend == Integer.MIN_VALUE && divisor == -1) {
                return Integer.MAX_VALUE;
            }
            boolean negative;
            negative = (dividend ^ divisor) <0;//用异或来计算是否符号相异
            long t = Math.abs((long) dividend);
            long d= Math.abs((long) divisor);
            int result = 0;
            for (int i=31; i>=0;i--) {
                if ((t>>i)>=d) {//找出足够大的数2^n*divisor
                    result+=1<<i;//将结果加上2^n
                    t-=d<<i;//将被除数减去2^n*divisor
                }
            }
            return negative ? -result : result;//符号相异取反
        }
    }
    
  • 相关阅读:
    bzoj3473 字符串
    洛谷P4070 生成魔咒
    洛谷P3975 弦论
    AT1219 歴史の研究
    课上讲的几个新的技巧
    索引与视图(转载)
    oracle中的分支与循环语句
    Oracle to_date()函数的用法《转载》
    自定义函数的存储过程的区别
    UNION 和 UNION ALL 操作符
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12946904.html
Copyright © 2020-2023  润新知