【问题标题】:[Java]The bigger the numbers, the weirder the output of Fibonacci sequence[Java]数字越大,斐波那契数列的输出越怪异
【发布时间】:2015-01-01 22:44:30
【问题描述】:

我编写了一个输出斐波那契数列的程序,该程序对小数运行正常。当我为序列的第 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 个输出是:

90 号:7540113804746346429

91 号:-6246583658587674878

如果这个问题被问了很多次,我深表歉意,我搜索了一下,没有找到太多我能理解的东西,所以我认为最好问一下。

【问题讨论】:

    标签: java fibonacci


    【解决方案1】:

    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;
    

    【讨论】:

    • 请问,我是否需要在 ( ) 之间的 new BigInteger() 中添加一个值,还是它会不断扩展,直到它大到足以容纳所有数字?
    • 你需要初始化它,但稍后它会随着内存的增长而调整......
    • 请问我将如何在我的代码中使用 BigInteger 类?抱歉问了这么多问题:(
    • 非常感谢你,你是我的英雄@Varsha
    【解决方案2】:

    这称为溢出。您应该使用 Java 中提供的 BigInteger 类。斐波那契数列增长得非常快,所以很快它的元素就不能适应intlong。所以你会溢出,你开始看到负数。

    【讨论】:

    • 我认为 BigInteger 涵盖了与 long 相同的值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 2015-06-05
    相关资源
    最近更新 更多