所以,我正在研究欧拉计划的底层。那里有很多很大的问题(其中大部分都远远超出了我的水平)。但我很快就遇到了一个大问题:
Java 不会处理大量数据。
现在,如果我有能力制作采用替代路线的快速程序,这对我来说就不是问题了。不幸的是,我不是那个人。
以问题 20 为例,它要求求 100 的数字和!我什至没有为数字解析而编写,而只是查找阶乘的代码失败了。
long onehfact = 1;
for(int i = 1; i <= 100; i++){
onehfact = onehfact * i;
System.out.println(onehfact);
}
这适用于大约 20 个序列,但开始给出随机的 19 位数字。到了 75 个序列,它只给了我零。
100!
绝对不是零。
我需要一种方法来获得令人难以置信的大数字,而科学记数法无法满足我的目的。是否有一个大型变量类型可供我使用,可以容纳 100-150 位数字?还有其他解决方案会产生相同的结果吗?
最佳答案
有一个名为 BigInteger 的类,它允许您处理和执行任意大小的数字的操作。它将为数字分配可变数量的内存。
这是文档。该类位于 java.math
包中:
http://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html
我也解决了 Java 中的 Project Euler 中的一些问题。对于处理大的非整数的其他一些问题,您需要相关的类java.math.BigDecimal
:
http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html
关于java - 当 Long 不够长时我该怎么办(Java)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28012878/