我编写了一个输出Fibonacci序列的程序,程序对于小数字正常工作。当我为第10 000个序列设置循环时,程序变得非常奇怪,并开始输出负数和正数。
起初我虽然是因为我使用了int类型的数字,但后来我将它改为long,程序仍然输出相同的东西。我对java很新,所以我猜我的程序有问题,或者我错过了一个大于long的类型,并且不会输出负数。
以下是代码。除了任何错误之外,请随意评论任何其他内容,因为我对java很新,所以代码可能看起来有点业余:
public class Problem2{ //fibonacci sequence
public static void main (String [] args ){
long first = 1;
long second = 1;
System.out.println(first);
System.out.println(second);
for ( int i = 1; i <= 100 ; i++){
long third = first + second;
first = second;
second = third;
System.out.println(third);
}
}
}
前90个数字的输出没问题:1 1 2 3 5 8 13 21 ... 之后,最后2个输出是:
90th:7540113804746346429
91st:-6246583658587674878
如果有人多次询问我,我真诚地道歉,我已经搜索了一下,并没有找到我能理解的东西,所以我觉得最好问一下。
答案 0 :(得分:4)
这称为溢出。您应该使用Java中提供的BigInteger
类。 Fibonacci序列生长得非常快,因此它的元素很快就不适合int
,也适合long
。所以你得到溢出,你开始看到负数。
答案 1 :(得分:0)
BigInteger类分配尽可能多的内存来保存要求保存的所有数据位
您可以将其声明并初始化为...例如 BigInteger bi1 = new BigInteger(“12345678900123”);
将您的计划更改为
BigInteger first, second, third ;
first= new BigInteger("123");
second= new BigInteger("50");
for ( int i = 1; i <= 100 ; i++){
third = first.add(second);
first = second;
second = third;