计算大整数Java的幂时的无限循环

use*_*565 1 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;
Run Code Online (Sandbox Code Playgroud)

我跑了这个,显然x永远不等于力量.任何帮助表示赞赏.

Eug*_*kov 5

你应该做

if (BigInteger.ZERO.equals(power)) return BigInteger.ONE;
if (BigInteger.ONE.equals(power))  return base;
Run Code Online (Sandbox Code Playgroud)

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

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

x = x.add(BigInteger.ONE);
Run Code Online (Sandbox Code Playgroud)

乘法应该改为

result = result.mulitply(base);
Run Code Online (Sandbox Code Playgroud)

其中初始结果值应为BigInteger.ONE