为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
蓝山帝景 2022-07-14 11:07:26
#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;}}
查看完整描述

2 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

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

查看完整回答
反对 回复 2022-07-18
?
慕仙森

TA贡献1827条经验 获得超7个赞

#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


查看完整回答
反对 回复 2022-07-18
  • 2 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信