我想把这个函数代码重写为Java中的BigInteger类:

 static int power(int x, int y, int p)
    {
        int res = 1; // Initialize result
 
        while (y > 0) {
 
            // If y is odd, multiply x with result
            if ((y & 1) != 0)
                res = res * x;
 
            // y must be even now
            y = y >> 1; // y = y/2
            x = x * x; // Change x to x^2
        }
        return res % p;
    }

我试着写了下面的代码:

static BigInteger power(BigInteger x, BigInteger y, BigInteger p) {
        BigInteger res = BigInteger.ONE; // Initialize result

        while (y.compareTo(BigInteger.ZERO) == 1) {   

            // If y is odd, multiply x with result
            if ((y.and(BigInteger.ONE)) != BigInteger.ZERO)  
                res = res.multiply(x);  

            // y must be even now
            y = y.shiftRight(1); // y = y/2   
            x = x.multiply(x); // Change x to x^2
        }
        return res.mod(p);
    }

但当我测试输入"功率(2,5,13)"时,输出是11,然而,正确答案是6.

我判断了几次我写的代码,但没有发现问题.你能帮我输出正确的答案代码吗?

推荐答案

您应该将引用类型与.equals进行比较,而不是与原语的==进行比较.

if (!BigInteger.ZERO.equals(y.and(BigInteger.ONE)))

此外,你应该只考虑结果的符号compareTo;不要直接与固定值(如1)进行比较.

while (y.compareTo(BigInteger.ZERO) > 0)

Java相关问答推荐

弹簧靴和龙目岛

缩小画布比例后更改滚动窗格的内部大小

有没有一种方法使保持活动设置专用于java.net.http.HttpClient的一个实例

使用联接和分页的SpringBoot Spring数据JPA

在模拟超类中设置非setter属性的值

调用引发泛型异常的泛型方法时出现编译错误

Spark忽略Iceberg Nessie目录

如何使用SpringBoot中的可分页对整数作为字符串存储在数据库中时进行排序

由于 list 中的权限错误,Android未生成

使用正则表达式从字符串中提取多个值

没有使用Lombok生成的参数

垃圾回收器是否真的删除超出作用域的对象?

如何使用Criteria Builder处理一对多关系中的空值?

Domino中不同的java.Protocol.handler.pkgs设置在XPages Java中导致错误

在Oracle db中,当我们提供字符串而不是数字时,比较是如何工作的?

如何在Maven Central上部署?

接受类及其接口的Java类型(矛盾)

Java中的一个错误';s stdlib SocksSocketImpl?

如何设置默认序列生成器分配大小

将天数添加到ZonedDateTime不会更改时间