操纵两个大国的有效方式

时间:2010-05-08 02:19:06

标签: java math bit-shift largenumber

编码2的幂的最有效方法是通过整数的位移。

1 << n给了我2^n

但是,如果我的数字大于intlong中允许的最大值,我可以用什么来有效地操纵2的幂?

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

5 个答案:

答案 0 :(得分:8)

这是你需要的吗?

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

这是n = 1000时的结果,

10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376

答案 1 :(得分:3)

您需要对“二人权”执行哪些操作?例如,如果它只是除法和乘法,你可以保持两个幂的log2,并在它们上使用减法和加法。如果不知道你想要的“操纵”,就不可能就如何有效“操纵”提出好的建议; - )。

答案 2 :(得分:1)

简单:long: - )

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

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

答案 3 :(得分:1)

看起来java.math.BigInteger就是您所需要的。

它有modshiftLeftshiftRight,当然还有addmultiplysubtractdivide。它是一个不可变的类型(ala String),所以也许它不是最有效的做事方式,但除非你已经证明它是一个性能问题,否则我不会担心它。

答案 4 :(得分:0)

是否需要准确?

否则你可以表示长度乘以2乘以int的幂。

示例:

x = 15 * 2 ^ 123