找到一个真正强大的数字

我正在为学生创建一个小游戏,在某个地方,它必须显示2 7830457 +1的值

如果数字不是那么大,我可以调用BigInteger的pow()方法。 由于数量很大,这种方法毫无用处。 我怎样才能找到这种数字的巨大力量? 请帮忙!

我不知道为什么你认为BigInteger没有达到这个目的:

 import java.math.BigInteger; public class Test { public static void main(String[] args) throws Exception { BigInteger big = BigInteger.valueOf(2) .pow(7830457) .add(BigInteger.ONE); System.out.println(big); } } 

它需要一段时间(特别是最后的字符串转换),但它是完全合理的。

正如彼得所指出的那样,让你离开7830457更加整洁。 我认为它不太清楚 – 当然它在字符串转换部分没有帮助。

编辑:几乎所有的时间都花在字符串转换上。 它最后在我的盒子上完成了。 我不能再看到它的开始了,但它以……结束

 08570502260645006898157834607641626568029302766491883299164453304032280181734737 79366998940913082443120328458954436211937775477966920836932628607888755839700303 873 

在二进制文件中它只有10000...01和7830456零。

在十进制中,将有大约两百万个数字,大约2兆字节的存储空间。 这完全符合BigInteger的默认堆大小的可行性。

在实践中,它甚至通过平方来使用取幂来快速计算它(尽管不是由规范保证)。 但是,转换为String需要一些时间,因为它是线性时间操作。

 import java.math.BigInteger; public class BigPow { public static void main(String[] args) { BigInteger result = (new BigInteger("2")).pow(27830457).add(BigInteger.ONE); System.out.println(result); } } 

这是一个慢慢打印数字的版本:

 import java.math.BigInteger; public class BigPow { public static void main(String[] args) { BigInteger result = (new BigInteger("2")).pow(27830457).add(BigInteger.ONE); BigInteger powten = BigInteger.TEN.pow(2357202); while(powten.compareTo(BigInteger.TEN) > 0) { BigInteger digit = result.divide(powten).mod(BigInteger.TEN); System.out.print(digit); powten = powten.divide(BigInteger.TEN); } } } 

第一个数字是:

WolframAlpha证实。

你应该能够用BigInteger来计算它。

  System.out.println(BigInteger.ONE.shiftLeft(7830457).add(BigInteger.ONE)); 

尝试这样的事情:

 BigInteger mant = new BigInteger("2"); BigInteger result = mant.pow(7830457).add(BigInteger.ONE);