这个程序有什么问题吗,为什么输入77以上输出就变成负数?

#include <stdio.h>
void main()
{
long fib(int n);
int b;
long a;
printf("Input a number:");
scanf("%d",&b);
a=fib(b);
printf("F%d=%ld\n",b,a);
}
long fib(int n)
{
long sum=0,a=1,b=1;
if(n==1) return 1;
else if(n==2) return 1;
else
{
for(;n>2;n--)
{
sum=a+b;
b=a;
a=sum;
}
return sum;
}
}

蓝山帝景
浏览 111回答 2
2回答

吃鸡游戏

这是必然的,因为实际数字实在是太大了,用unsigned 无符号可以表示的稍微大点,或者用浮点型数据,以牺牲部分精度为代价,得到近似结果,但是也不能从根本上解决问题要用大数运算才可以根本上解决问题

慕仙森

#include <stdio.h>long long fib(int n);int main(){int b;long long a;printf("Input a number:");scanf("%d",&b);a=fib(b);printf("F%d=%lld\n",b,a);return 0;}long long fib(int n){long long sum=0LL,a=1LL,b=1LL;if(n==1) return 1;else if(n==2) return 1;else{for(;n>2;n--){sum=a+b;b=a;a=sum;}return sum;}}显然用long long就好了~注意赋值的时候的LL
打开App,查看更多内容
随时随地看视频慕课网APP