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

标签 java variables

所以,我正在研究欧拉计划的底层。那里有很多很大的问题(其中大部分都远远超出了我的水平)。但我很快就遇到了一个大问题:

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/

相关文章:

javascript - 将变量传递给外部 Javascript

java - 将 float 格式化为特定长度

java - 我应该了解 Java 开发堆栈的哪些组件?

c - 如何将变量传递给另一个函数?

有人能帮我找出C语言中的逻辑错误吗?我正在尝试 fscanf 到一个数组和一个变量。

javascript - jQuery,从变量调用数组对象的一部分

java - 暂停或 hibernate AsyncTask 而不影响 UI

java - 使用 Retrofit 将 id 的 int 值转换为 String 时找不到资源

java - 在 JAR 中包含 JAR 的类路径

ruby - 如何声明在 RSpec 中的示例之间共享的变量?