#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 无符号可以表示的稍微大点,或者用浮点型数据,以牺牲部分精度为代价,得到近似结果,但是也不能从根本上解决问题
要用大数运算才可以根本上解决问题
慕仙森
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
- 2 回答
- 0 关注
- 108 浏览
添加回答
举报
0/150
提交
取消