我正在用Java玩数字游戏,我想看看我能做多大的数字。据我所知,BigInteger可以容纳无限大的数字,只要我的计算机有足够的内存来容纳这样的数字,对吗?
我的问题是BigInteger.pow只接受一个整数,而不接受另一个BigInteger,这意味着我只能使用最大2,147,483,647的数字作为指数。可以这样使用BigInteger类吗?
BigInteger.pow(BigInteger)谢谢。
发布于 2011-01-03 14:16:57
您可以使用repeated squaring编写自己的代码
BigInteger pow(BigInteger base, BigInteger exponent) {
BigInteger result = BigInteger.ONE;
while (exponent.signum() > 0) {
if (exponent.testBit(0)) result = result.multiply(base);
base = base.multiply(base);
exponent = exponent.shiftRight(1);
}
return result;
}对于负基或指数可能不起作用。
发布于 2013-01-11 01:32:16
在Java语言中,你只能通过模算术来实现这一点,这意味着你可以做一个a^b mod c,其中a,b,c是BigInteger数。
这是使用以下命令完成的:
BigInteger modPow(BigInteger exponent, BigInteger m) 发布于 2011-01-03 17:18:16
BigInteger的底层实现限制为(2^31-1) *32位值。这几乎是2^36位。您将需要8 GB的内存来存储它,并且需要很多次这样的内存来对它执行任何操作,比如toString()。
顺便说一句:你永远不会读到这样的数字。如果你想把它打印出来,你可能要花一生的时间才能读完。
https://stackoverflow.com/questions/4582277
复制相似问题