LargeInteger
似乎没有pow
功能,如果有,则无法处理pow(0)
BigInteger
can。
我试图构建自己的内存,但内存似乎很糟糕,并且可能存在无限循环,因为它无休止地运行:
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
方法?
答案 0 :(得分:4)
每次通过for
循环,您都可以使用此行有效地对结果进行平方:
base = base.times(base);
你最终会使用base
获得(exponent
幂的2倍),而不是base
exponent
的力量。
从1
开始,并在base
每个循环中相乘。
LargeInteger result = LargeInteger.valueOf(1);
for(int i = 0; i < exponent; i++){
result = result.times(base);
}
return result;
为了优化,您可以尝试修改算法以使用exponentiation-by-squaring。
答案 1 :(得分:2)
LargeInteger,来自Number,实际上有一个战俘功能。