我正在尝试在项目euler网站上完成问题25,但我收到了Java堆空间错误。我该如何解决这个问题?
import java.util.ArrayList;
public class Problem25 {
public static void main(String[] args){
int a = 1;
int b = 1;
int c;
ArrayList<Integer> nums = new ArrayList<Integer>();
nums.add(1);
nums.add(1);
for(int i = 2; ;i++){
c = a+b;
nums.add(c);
if(nums.get(i).toString().length() == 1000)
System.out.print(nums.get(i));
a++;
b++;
}
}
}
答案 0 :(得分:0)
for(int i = 2; ;i++){
当循环中断时你错过了一个条件。你正在做的是添加整数并且循环继续。在某个时候,ArrayList
变得太大并抛出Java堆空间错误
答案 1 :(得分:0)
这个程序离解决Euler #25非常远:
for(int i = 2; ;i++)
中缺少循环条件,循环体中没有任何东西可以退出循环ArrayList<Integer>
中的数字长度永远不会达到1000:最大可能Integer
为2147483647,长度为10
List
无需解决此问题nums.get(i)
替换为Integer.toString(c)
,并删除涉及nums
的所有语句,以获得相同的结果。 (但这些都不重要,因为上面的第一点)解决此问题的一些提示:
BigInteger
生成斐波纳契数列
int
很容易找到示例实现。将int
替换为BigInteger
int
计数器查找索引