java - 计算大整数 Java 的幂期间的无限循环

标签 java biginteger exponent

我一直盯着这段代码看,不知道它有什么问题,也许一双新眼睛能帮上忙。

public static BigInteger powerOfBigInteger (BigInteger base, BigInteger power){
    if (power == BigInteger.valueOf(0)){
        return BigInteger.valueOf(1);
    }

    if (power == BigInteger.valueOf(1)){
        return base;
    }

    BigInteger x = BigInteger.valueOf(1);
    while (x != power ){
        base.multiply(base);
        x.add(BigInteger.valueOf(1));
        System.out.println(x + " " + power);
                   return base;
    } 

    return base;

我运行它,显然 x 永远不等于幂。感谢您的帮助。

最佳答案

你应该这样做

if (BigInteger.ZERO.equals(power)) return BigInteger.ONE;
if (BigInteger.ONE.equals(power))  return base;

并且您必须累加乘法和加法的结果,因为 BigInteger 是不可变的并返回新的 BigInteger 实例

无限循环是因为你的 x 永远不会改变 - 应该是

x = x.add(BigInteger.ONE);

乘法应改为

result = result.mulitply(base);

初始结果值应为 BigInteger.ONE

关于java - 计算大整数 Java 的幂期间的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11025494/

相关文章:

java - WildFly - 如何查看部署

java - 简单语句中的BigInteger逻辑问题

java - BigDecimal 与 BigInteger 和 BigDecimal 的性能比较

python - 为什么 np.array([1e5])**2 与 Python 中的 np.array([100000])**2 不同?

floating-point - 为什么偏置指数的值是 127 而不是 128?

java - 如何在 Java 模块中指定源和目标兼容性?

java - 如何将连接传递给 Mybatis

Java 重命名正常文件的问题。我想将给定名称重命名为新文件名

math - 任意精度算术说明

r - 将指数添加到轴标签 (R/ggplot2)