美文网首页
leetcode-两数相除

leetcode-两数相除

作者: ButICare_b72d | 来源:发表于2024-01-23 00:32 被阅读0次

https://leetcode.cn/problems/divide-two-integers/

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

整数除法应该向零截断,也就是截去(truncate)其小数部分。
例如,8.345 将被截断为 8 ,-2.7335 将被截断至 -2 。

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

注意:假设我们的环境只能存储 32 位 有符号整数,其数值范围是 [−231,  231 − 1] 。
本题中,如果商 严格大于 231 − 1 ,则返回 231 − 1 ;如果商 严格小于 -231 ,则返回 -231 。

示例 1:

输入: dividend = 10, divisor = 3
输出: 3
解释: 10/3 = 3.33333.. ,向零截断后得到 3 。
示例 2:

输入: dividend = 7, divisor = -3
输出: -2
解释: 7/-3 = -2.33333.. ,向零截断后得到 -2 。

代码

class Solution {
public int divide(int dividend, int divisor) {
    if (dividend == 0) {
        return 0;
    }
    if (divisor == 1) {
        return dividend;
    }
    if (divisor == -1) {
        return dividend == Integer.MIN_VALUE ? Integer.MAX_VALUE : -dividend;
    }
    boolean isSame = (dividend < 0 && divisor < 0) || (dividend > 0 && divisor > 0);
    //取绝对值进行计算,无需判断谁正谁负
    long dividendLong = dividend > 0 ? dividend : dividend == Integer.MIN_VALUE ? Integer.MAX_VALUE+1L : -dividend;
    long divisorLong = divisor > 0 ? divisor : divisor == Integer.MIN_VALUE ? Integer.MAX_VALUE+1L : -divisor;
    long count = 0;
    while (dividendLong >= divisorLong) {
        //每次翻倍-,超过重头开始
        long temp = divisorLong;
        long tempCount = 1;
        while (true) {
            if (dividendLong < temp) {
                break;
            }
            tempCount += tempCount;
            dividendLong -= temp;
            temp += temp;
        }
        //-1是由于每次满足条件都会多加第一次的1
        count += tempCount - 1;
    }
    return (int) (isSame ? count : -count);
}
}

相关文章

  • 两数相除

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

  • 两数相除

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/divide...

  • 【leetcode】 两数相除

    【leetcode】 两数相除 题目: 给定两个整数,被除数 dividend 和除数 divisor。将两数相除...

  • LeetCode-29-两数相除

    LeetCode-29-两数相除 题目 给定两个整数,被除数 dividend 和除数 divisor。将两数相除...

  • 29. 两数相除

    29. 两数相除 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法...

  • 29. 两数相除

    29.两数相除 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和...

  • 素数问题

    1.辗转相除法 gcd函数用于求两数的最大公约数,该函数递归的返回a,b中较小的数和他们相除之后的余数。直到两数除...

  • 29.两数相除

    题目****给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 m...

  • [leetcode] 29 两数相除

    leetcode 29 link Given two integers dividend and divisor,...

  • LeetCode 29——两数相除

    1. 题目 2. 解答 2.1. 方法一 题目要求不能使用乘法、除法和除余运算,但我们可以将除法转移到对数域。 这...

网友评论

      本文标题:leetcode-两数相除

      本文链接:https://www.haomeiwen.com/subject/kgsuodtx.html