斐波那契数列,为什么会有负数出现

img


斐波那契数列求50个月的兔子数量,为什么会有负数出现,求教导,谢谢各位

应该是因为计算出的值超过了int的取值范围溢出了,将各变量的数据类型改为long long int即可。

修改如下:

参考链接:


C语言入门——常见数据类型取值范围 - 知乎 常见数据类型取值范围: 关于取值范围,熟知一些常用的还是有必要的,比如有的编程题就会卡取值范围,所以整理了下图表格这些以作分享。 浮点型: 文字叙述: int -2147483648~2147483647 long -2147483648~2147… https://zhuanlan.zhihu.com/p/435724243


#include <stdio.h>

int main(void){
    
    // https://zhuanlan.zhihu.com/p/435724243
    // 因为兔子的数量会超出int的取值范围,这里将各变量的数据类型改为long long int 
    long long  m,n,k,h=0;
    
    for(m=0,n=1,k=1;k<=50;k++){
        h=m+n;
        m=n;
        n=h;
        printf("%20lld",m);
        if((k%5==0)){
            printf("\n");
        }
    }
    
    return 0;
    
} 

img

【以下回答由 GPT 生成】

问题的解决方案如下:

斐波那契数列中出现负数是因为使用32位有符号整数的范围有限。斐波那契数列的数值在一定的序号后会超出32位整数的最大值,从而导致溢出,使得数值变为负数。

为了解决这个问题,可以使用更大范围的数据类型,例如64位整数 (long long) 或者使用高精度的大数库。以下是使用64位整数类型的修改后的代码:

#include <stdio.h>

int main() {
    long long m = 0, n = 1, k, h = 0;

    for (k = 1; k <= 50; k++) {
        h = m + n;
        m = n;
        n = h;

        printf("%20lld", m);

        if (k % 5 == 0) {
            printf("\n");
        }
    }

    return 0;
}

使用 long long 类型可以延长斐波那契数列的计算范围,避免了溢出问题。这段代码将打印出正确的斐波那契数列数值。

希望这能解答您的问题!如果您有其他疑问,请随时提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^