0

编码 2 的幂的最有效方法是对整数进行位移。

1 << n给我2^n

但是,如果我有一个大于 aint或 a中允许的最大值的数字long,我可以使用什么来有效地操纵 2 的幂?

(我需要能够对数字进行加法、乘法、除法和模运算)

4

5 回答 5

8

这是你需要的吗?

BigInteger hugeNumber = BigInteger.ONE.shiftLeft(n);

这是 n=1000 时的结果,

10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
于 2010-05-08T02:27:52.580 回答
3

您需要对“二的幂”执行哪些操作?例如,如果它只是除法和乘法,您可以只保留log22 的幂,然后对它们使用减法和加法。如果不知道你想要什么的“操纵”,就不可能就如何有效地“操纵”提出好的建议;-)。

于 2010-05-08T02:23:11.230 回答
1

看起来java.math.BigInteger是你需要的。

它有mod, shiftLeft, ,shiftRight当然还有add,和。它是一种不可变类型 (ala ),因此它可能不是最终最有效的做事方式,但除非您已证明它是性能问题,否则我不会担心。multiplysubtractdivideString

于 2010-05-08T02:38:54.493 回答
1

简单:long:-)

如果您不介意浮点数,double可以精确表示 2 到 2^1023 的所有幂。

否则,这取决于你在做什么“操纵”。

于 2010-05-08T02:26:29.447 回答
0

需要准确吗?

否则,您可以将其表示为 long 乘以 2 的 int 次方。

例子:

x = 15 * 2^123

于 2010-10-10T18:29:57.980 回答