斐波那契数列(注意溢出)
F(0)=0;F(1)=1;F(2)=1
输入
n
输出
Fn
- for循环法
#include<bits/stdc++.h>
int main()
{
int n;
double a=1,b=0,c=0;//用Int到了第48项就出现溢出!!
scanf("%d",&n);//也要double a,b,在加的过程中也会溢出
if(n==0)
printf("0\n");
else
{
for(int i=1;i<=n;i++){
c=a+b;
a=b;
b=c;
}
printf("%lf",c);
}
return 0;
}
- 公式法
#include<bits/stdc++.h>
#include<math.h>
int main()
{
int n;
double t,x,y,z; //不定义int是因为后面运算会溢出
scanf("%d",&n);
x=pow(1+sqrt(5),n);
y=pow(1-sqrt(5),n);
z=pow(2,n);
t=((x-y)/z)/sqrt(5);
printf("%.2f\n",t);
return 0;
}
/*此处定义一个函数也可以不写,直接调用
double pow(int a,int b)//一个数的n次方的函数,a为底数,b为指数
{
int m=1;
for(int i=1;i<=b;i++)
m=m*a;
return m;
}
*/