3

LargeInteger似乎没有pow功能,或者如果有,pow(0)虽然BigIntegercan无法处理。

我尝试构建自己的,但内存似乎猛增,并且可能存在无限循环,因为它无休止地运行:

public static LargeInteger liPow(LargeInteger base, int exponent){
    if(exponent == 0){
        return LargeInteger.valueOf(1);
    }
    else if(exponent == 1){
        return base;
    }
    else{
        for(int i=1; i<exponent; i++){
            base = base.times(base);
        }
        return base;
    }
}

如何pow开发一种方法LargeInteger

4

2 回答 2

4

每次通过你的for循环,你都有效地用这条线对结果进行平方:

base = base.times(base);

你会base以 (2 的exponent幂) 的幂结束,而不是base的幂exponent

在每个循环中开始1并相乘。base

LargeInteger result = LargeInteger.valueOf(1);
for(int i = 0; i < exponent; i++){
    result = result.times(base);
}
return result;

为了优化,您可以尝试修改算法以使用exponentiation-by-squareing

于 2014-01-22T19:23:45.180 回答
2

LargeInteger 是Number的后代,实际上有一个 pow 函数。

于 2014-01-22T19:25:48.787 回答