斐波那契数列的项可以为负吗? [重复]

问题描述 投票:-1回答:2

我正在尝试打印斐波那契数列的前80个术语,但是在某些范围数字看来是负数之后。那么这是正确的吗?

这里是代码:

#include <stdio.h>
    int main() {
        int i,first_term=0, second_term=1, next_term;
        for(i=0; i<80; i++)
        {
            printf("%d, ",first_term);
            next_term= first_term + second_term;
            first_term=second_term;
            second_term = next_term;

        }
        return 0;
    }
c fibonacci
2个回答
2
投票

这是由于整数溢出。

斐波纳契数不能为负。

我建议您如下使用longlong long int

#include <stdio.h>
int main() {
    int i;
    long long int first_term=0, second_term=1, next_term;
    for(i=0; i<80; i++)
    {
        printf("%lld, ",first_term);
        next_term= first_term + second_term;
        first_term=second_term;
        second_term = next_term;

    }
    return 0;
}

PS:斐波那契数列增长非常快。当数字越过无符号long long int的上限long long int时,unsigned long long int甚至18,446,744,073,709,551,615可能再次溢出。因此,BigInt for C ++将是有益的。


1
投票

是的,您的公式是正确的。但是,斐波那契数列中的数字快速增长,因此您的整数溢出。例如,如果使用long而不是int,则可以获得更正确的数字。

#include <stdio.h>

int main(){
    unsigned int i;
    unsigned long long first_term=0, second_term=1, next_term;

    for(i=0; i<80; i++)
    {
        printf("%llu, ",first_term);
        next_term= first_term + second_term;
        first_term=second_term;
        second_term = next_term;
    }

    return 0;
}

0
投票

Fibinacci系列项不能为负。在某些条件下,您会得到负值,因为在某些条件下,这些值会变得太大,以至于超出整数数据类型(2或4字节)的范围。因此,您应该使用字符串格式或使用长数据类型。只需将%d替换为%lu。变成:

#include <stdio.h>
    int main() {
        int i;
        long first_term=0, second_term=1, next_term;
        for(i=0; i<80; i++)
        {
            printf("%lu, ",first_term);
            next_term= first_term + second_term;
            first_term=second_term;
            second_term = next_term;

        }
        return 0;
    }
© www.soinside.com 2019 - 2024. All rights reserved.