[Java]数字越大,斐波那契序列的输出越奇怪

时间:2014-11-05 16:35:30

标签: java fibonacci

我编写了一个输出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

如果有人多次询问我,我真诚地道歉,我已经搜索了一下,并没有找到我能理解的东西,所以我觉得最好问一下。

2 个答案:

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