当Long不够长(Java)时我该怎么办?

时间:2015-01-18 17:53:22

标签: java variables

所以,我正在通过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位数字?还有其他解决方案会产生相同的结果吗?

2 个答案:

答案 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);
}