#include<stdio.h>
int main()
{
int arry_next[100]={0};
int arry_form[100]={0};
int arry_temp[100]={0};
int index_n=0;
int index_f=0;
int i=0,j=0,k=0,z=0;
arry_next[0]=0;
arry_form[0]=1;
arry_next[0]=0;
for(i=0;i<2018;i++)
{ if(i==0)
{
arry_temp[z]=1;
}
else
{
for(z=0;z<=index_n;z++)//保留数列前一个值
{
arry_temp[z]=arry_next[z];
}
}
for(k=0;k<=index_n&&k<=index_f;k++)//数列前一项加现在的一项得到后一项
{
arry_next[k]=arry_next[k]+arry_form[k];
}
for(z=0;z<=index_n;z++)//保留值赋值给下一次的前一项
{
arry_form[z]=arry_temp[z];
index_f=index_n;
}
for(j=0;j<index_n;j++)//判断是否进为
{
if(arry_next[j]>=100000)
{
arry_next[j+1]=arry_next[j]/100000+arry_next[j+1];
arry_next[j]=arry_next[j]%100000;
}
}
while(arry_next[index_n]>10000)//判断最高位是否进为
{
arry_next[index_n+1]=arry_next[index_n]/100000+arry_next[index_n+1];
arry_next[index_n]=arry_next[index_n]%100000;
index_n++;
}
//printf("%d ",arry_next[0]);
}
arry_next[0]=arry_next[0]+1;
for(i=index_n;i>=0;i--)
{
printf("%d",arry_next[i]);
}
}