题目描述
斐波拉契的数列如下形式,输出Fibonacci的第N(1<=N<=200)项。 1 1 2 3 5 8 13 21 34 55 ….
输入
一个数 N。
输出
斐波那契数列的第 N 项的值
样例输入
10
样例输出
55
提示
数据范围:1<=n<=200
题解
#include<bits/stdc++.h>
using namespace std;
// 高精度
const int N=1200;
char sum[N];
int s=0,m=0,n;
int main()
{
cin>>n;
string s1,s2;
int a[N],b[N];
int cnt,i;
//注意这里
s1="1";
s2="1";
for(m=2;m<n;m++)
{
/*
将常规斐波那契数列的求解方法,替换成高精度的方式
k=a+b;//第i位k的值是前两位之和
a=b;//a向右移动一位
b=k;//b向右移动一位
*/
//数组初始化,填充0
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
a[0]=s1.length();
for(i=1;i<=a[0];i++)
{
a[i]=s1[a[0]-i]-'0';
}
b[0]=s2.length();
for(i=1;i<=b[0];i++)
{
b[i]=s2[b[0]-i]-'0';
}
cnt=(a[0]>b[0]?a[0]:b[0]);
for(i=1;i<=he;i++)
{
a[i]+=b[i];
a[i+1]+=a[i]/10;
a[i]%=10;
}
cnt++;
//计算出来的值,去除前导0
while((a[cnt]==0)&&(cnt>1)){
cnt--;
}
for(i=cnt,s=0;i>=1;i--,s++)
{
sum[s]=a[i]+'0';
}
s1=s2;
s2=sum;
}
cout<<s2<<endl;
return 0;
}