You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言编写斐波那契数列程序,输入大数值时输出负数是什么原因

问题分析

你的斐波那契计算逻辑本身没有错误,输出负数的核心原因是32位有符号整数溢出。
当前绝大多数编译环境下,C语言的int类型为32位有符号整数,可存储的数值范围是-2147483648 ~ 2147483647(即$-2{31}$到$2{31}-1$)。斐波那契数列增长速度极快:

  • 第47项值为1836311903,仍在int的可表示范围内
  • 第48项值为1836311903 + 1134903170 = 2971215073,已经超出了32位int的上限

有符号整数溢出属于C语言标准规定的未定义行为,你看到的负数是补码存储规则导致的:整数在内存中以补码形式存储,最高位为符号位,溢出后数值最高位被置为1,就会被解析为负数,和你输出的-1323752223完全吻合。


修复方案
  • 更换更大范围的整数类型:如果只需要计算100项以内的斐波那契数,把存储数列值的变量类型从int替换为64位有符号整数long long即可,long long的取值范围为-9223372036854775808 ~ 9223372036854775807,可支持计算到第90项左右的斐波那契数。注意输出long long类型时,printf的格式符要换成%lld。
  • 如需计算更大项数:内置整数类型无法承载过大的斐波那契值,可以自行实现高精度大整数运算,通过数组、字符串按位存储数值,手动实现进位加法逻辑。
  • 代码规范优化:你当前代码中Num3=Num1+Num2;写在读取用户输入之前,虽然不影响运行结果,但建议把变量运算、初始化逻辑放在读取输入、校验输入合法性之后,减少无效执行逻辑,同时可以增加输入合法性判断,避免用户输入小于1的非法值导致输出异常。

修改后的可正常运行到90项的示例代码:

#include <stdio.h>
int main() {
    int i, Nth;
    long long Num1 = 0, Num2 = 1, Num3;
    printf("Enter Fibonacci Sequence terms limit: ");
    scanf("%d", &Nth);
    if (Nth < 1) {
        printf("Term limit must be a positive integer.\n");
        return 1;
    }
    printf("Fibonacci Sequence: ");
    if (Nth >= 1) printf("%lld", Num1);
    if (Nth >= 2) printf(", %lld", Num2);
    Num3 = Num1 + Num2;
    for(i = 3; i <= Nth; ++i) {
        printf(", %lld", Num3);
        Num1 = Num2;
        Num2 = Num3;
        Num3 = Num1 + Num2;
    }
    printf("\n");
    return 0;
}

学习方向指引
  • 掌握C语言各基础数据类型的占用空间、取值范围,理解整数在内存中的补码存储规则,明确有符号数和无符号数的差异。
  • 理解C语言中「未定义行为」的概念,熟悉整数溢出、数组越界、空指针解引用等常见未定义行为的触发场景,编码时主动规避。
  • 如需处理超大数值运算,可以系统学习高精度(大整数)运算的常见实现思路。

附:原始提问内容

你提交的原始代码如下:

int i,Nth,Num1=0,Num2=1,Num3;
Num3=Num1+Num2;
printf("Enter Fibonacci Sequence terms limit: ");
scanf("%d",&Nth);
printf("Fibonacci Sequence: %d, %d",Num1,Num2);
for(i=3;i<=Nth;++i){
    printf(", %d",Num3);
    Num1=Num2;
    Num2=Num3;
    Num3=Num1+Num2;
};

输入48时的原始运行输出:

Fibonacci Sequence: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 
1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 
514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 
39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 1134903170, 
1836311903, -1323752223

内容的提问来源于stack exchange,提问作者Kryspin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 06:54:31