题意:求第n项斐波那契数列的值。
考点:位数过多,最高千位,递归肯定不行,可高精度加法求解。每进一位放到数组后面,从后往前输出。
#include<iostream>
using namespace std;
int f[5010][1010],len[5010];//f数组第一个表示处于斐波那契的第几项,第二个表示这项的第几位数;len数组表示第几项的位数
void add()
{
f[1][1]=1,f[2][1]=1;
len[1]=1,len[2]=1;
int i,j;
for(i=3;i<=5000;i++)//最高一千位大概在第5000项左右
{
int jin=0;
for(j=1;j<=max(len[i-1],len[i-2]);j++)
{
f[i][j]=f[i-1][j]+f[i-2][j]+jin;
jin=f[i][j]/10;
f[i][j]%=10;
}
if(jin)
{
f[i][j]=1;
len[i]=j;
}
else len[i]=j-1;
}
}
int main()
{
int n,i;cin>>n;
add();
for(i=len[n];i>=1;i--)
cout<<f[n][i];
cout<<endl;
}