#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条经验 获得超8个赞
#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 关注
 - 149 浏览
 
添加回答
举报
0/150
	提交
		取消
	