我创建了一个名为numbers的数组,它将存储Fibonacci序列的值。 1,2,3,5等 问题是当我尝试以非常高的索引值调用数组值时,数组值变为负数。
numbers[10] = 144
这是合理的,但
numbers[9999998] = -1448735941
任何帮助?
public static void main(String[] args) {
int[] numbers = new int[10000000];
numbers[0] = 1;
numbers[1] = 2;
for(int x = 2; x<=numbers.length-1; x++)
{
numbers[x] = numbers[x-1] + numbers[x-2];
}
System.out.println(numbers[9999998]);
System.out.println(numbers[10]);
答案 0 :(得分:5)
溢出。一旦该值超过32位int的最大“容量”,结果将回绕并从最小值开始(负值)。
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
long和BigInteger能够存储比int更高的值。
答案 1 :(得分:3)
您遇到integer overflow。请查看BigInteger
了解一种解决方法。