#include<stdio.h>
#include<stdlib.h>
int f[5003][5003];
void step(int f[][5003],int n)
{
int i,j,t=0;
for(i=3;i<=n;i++)
{
for(j=0;j<=t;j++)
{
f[i][j]=f[i-1][j]+f[i-2][j];
}
for(j=0;j<=t;j++)
{
if(f[i][j]>=10)
{
f[i][j]=f[i][j]%10;
f[i][j+1]++;
}
}
if(f[i][t+1])
t++;
}
if(f[n][t+1]!=0)
t++;
for(j=t;j>=0;j--)
printf("%d",f[n][j]);
}
int main()
{
f[1][0]=1;
f[2][0]=2;
int n;
scanf("%d",&n);
step(f,n);
system("pause");
}
测试点到了5003,所以数组开的比较大
高精度加法+递推
注意:在控制位数时,每次加法结束后再判断需不需要加一位,位数同时是循环
的控制条件