• 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;//符号相异取反
        }
    }
    
  • 相关阅读:
    函数的缺省参数和函数初始化示例以及布尔型参数的使用示例
    指针使用示例程序
    按值传递对象和按址传递对象
    详解js跨域
    CSS之BFC及其应用
    js图片预加载、有序加载
    12个非常有用的JavaScript技巧
    MySQL使用pt-online-change-schema工具在线修改1.6亿级数据表结构
    nodeJS实现一个在线填表应用
    浏览器的缓存机制
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13076329.html
Copyright © 2020-2023  润新知