zoukankan      html  css  js  c++  java
  • 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;//符号相异取反
        }
    }
    
  • 相关阅读:
    系统操作日志设计代码实现
    SQL SERVER 存储过程复习
    IGrab信息采集系统流程图(初稿)
    收藏几段SQL语句和存储过程
    SQL Server联机丛书:存储过程及其创建
    使用dynamic来简化反射实现,并且提高了性能
    你必须知道的C#的25个基础概念(附演示)
    弹窗插件
    dede 搜索时出现“SphinxClient类找不到”解决
    开启includes模块运行shtml
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12946904.html
Copyright © 2011-2022 走看看