java中不使用乘法、除法和取模运算符来除两个整数

2024-02-24

我写了一个代码,该代码在将两个数字相除后找出商,但不使用乘法、除法或取模运算符。

My code

public int divide(int dividend, int divisor) {

    int diff=0,count=0;
    int fun_dividend=dividend;
    int fun_divisor=divisor;
    int abs_dividend=abs(dividend);
    int abs_divisor=abs(divisor);

    while(abs_dividend>=abs_divisor){
        diff=abs_dividend-abs_divisor;

        abs_dividend=diff;
        count++;

    }

    if(fun_dividend<0 && fun_divisor<0){
        return count;
    }
    else if(fun_divisor<0||fun_dividend<0) {
        return (-count);
    }

    return count;

}

我的代码通过了股息=-1、除数=1 或除数=1 和除数=-1 等测试用例。但它无法通过像股息=--2147483648和除数=-1这样的测试用例。但是,当两个输入均为负数时,我有一个 if 语句。

  if(fun_dividend<0 && fun_divisor<0){
        return count;
    }

当我的输入是 -2147483648 和 -1 时,它返回零。我调试了我的代码,发现它无法到达 while 循环的内部语句。它只是检查 while 循环并终止并执行

 if(fun_dividend<0 && fun_divisor<0){
        return count;
    }

很明显,两个输入都是负数,所以我使用Math.abs使他们积极发挥作用。但是当我尝试查看变量abs_dividend 和abs_divisor 的值时,它们显示负值。

整数最大值可以采用 9 位数字。那么我怎样才能通过这个测试用例呢?根据此测试用例,被除数是一个 10 位数字,对于整数范围无效。

根据测试用例,我得到的输出应该是 2147483647。

我该如何解决该错误?

先感谢您。


尝试使用位操作来实现此目的,如下所示:

public static int divideUsingBits(int dividend, int divisor) {
        // handle special cases
        if (divisor == 0)
            return Integer.MAX_VALUE;
        if (divisor == -1 && dividend == Integer.MIN_VALUE)
            return Integer.MAX_VALUE;

        // get positive values
        long pDividend = Math.abs((long) dividend);
        long pDivisor = Math.abs((long) divisor);

        int result = 0;
        while (pDividend >= pDivisor) {
            // calculate number of left shifts
            int numShift = 0;
            while (pDividend >= (pDivisor << numShift)) {
                numShift++;
            }

            // dividend minus the largest shifted divisor
            result += 1 << (numShift - 1);
            pDividend -= (pDivisor << (numShift - 1));
        }

        if ((dividend > 0 && divisor > 0) || (dividend < 0 && divisor < 0)) {
            return result;
        } else {
            return -result;
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java中不使用乘法、除法和取模运算符来除两个整数 的相关文章

随机推荐