所以,我正在通过Project Euler的底层工作。那里有很多很大的问题(其中大部分都超出了我的水平)。但我很快就遇到了一个重大问题:
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位数字?还有其他解决方案会产生相同的结果吗?
答案 0 :(得分:3)
有一个名为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
答案 1 :(得分:1)
您可以使用BigInteger来满足您的要求。
BigInteger onehfact = BigInteger.valueOf(1L);
for(long i = 1; i <= 100; i++){
onehfact = onehfact.multiply(i);
System.out.println(onehfact);
}