Java 从Math.pow的结果构造BigInteger时的NumberFormatException
我试图处理一些较大的整数值,但初始化BigInteger变量时遇到一些问题。我一直在做:Java 从Math.pow的结果构造BigInteger时的NumberFormatException,java,biginteger,Java,Biginteger,我试图处理一些较大的整数值,但初始化BigInteger变量时遇到一些问题。我一直在做: BigInteger x = new BigInteger("" + (Math.pow(2, n))); 其中n是100中的某个数字,但这引发了NumberFormatException。我不认为我可以使用BigInteger,Valueof(),因为这需要很长时间,我认为这还不够大。任何帮助都将不胜感激。以某种方式返回类型为double的值,该值将使用十进制分隔符格式化BigInteg
BigInteger x = new BigInteger("" + (Math.pow(2, n)));
其中n是100中的某个数字,但这引发了NumberFormatException。我不认为我可以使用BigInteger,Valueof(),因为这需要很长时间,我认为这还不够大。任何帮助都将不胜感激。以某种方式返回类型为double
的值,该值将使用十进制分隔符格式化BigInteger
无法接受十进制值
抛出:NumberFormatException
-val不是BigInteger
的有效表示形式
只需使用biginger
BigInteger x = BigInteger.TWO.pow(n);
以某种方式返回类型为double
的值,该值将使用十进制分隔符进行格式化BigInteger
无法接受十进制值
抛出:NumberFormatException
-val不是BigInteger
的有效表示形式
只需使用biginger
BigInteger x = BigInteger.TWO.pow(n);
如果从BigInteger使用,则使用Pow执行操作将返回一个doubleBigInteger。如果从BigInteger使用,则使用Pow执行操作将返回一个doubleBigInteger。有趣的是,对于大
n
,BigInteger.ONE.shiftLeft(n)
@sirrafblebuffle:嗯,这很有道理shiftLeft()
可以非常有效地进行移位,而pow()
必须使用多次乘法来计算功率。事实上,我希望shiftLeft()
比你发现的要快得多,即使对于n
的相对“小”值也是如此。因为没有BigInteger.2(好吧),我稍微修改了你的答案。@RudyVelthuis从9开始,@Savior:啊,还没有尝试9。有趣的是,对于大的n
,BigInteger.1.shiftLeft(n)
的速度似乎是biginger的两倍。TWO.pow(n)@SirRaffleBuffle:嗯,这很有道理shiftLeft()
可以非常有效地进行移位,而pow()
必须使用多次乘法来计算功率。事实上,我希望shiftLeft()
比你发现的要快得多,即使对于n
的相对“小”值也是如此。因为没有大整数。二(好吧),我稍微修改了你的答案。@RudyVelthuis自9以来,@Savior:啊,还没有尝试9。