注意范围,来个简陋的高精度就行了。

#include<bits/stdc++.h>
using namespace std;
long long f[310][10010];
long long cnt[310];
inline void add(int x,int y,int z)
{
    int m=max(cnt[y],cnt[z]);
    for(int i=1;i<=m;++i)
    {
        f[x][i]+=f[y][i]+f[z][i];
        if(f[x][i]>9)
        {
            f[x][i+1]+=f[x][i]/10;
            f[x][i]%=10;
        }
    }
    if(f[x][m+1]) cnt[x]=m+1;
    else cnt[x]=m;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
    //reopen(".in","r",stdin);
    //freopen(".out","w",stdout);
    int n;
    cin>>n;
    //if(n==0) {cout<<0;return 0;}
    n=n+1;
    f[1][1]=f[2][1]=cnt[1]=cnt[2]=1;
    for(int i=3;i<=n;++i)
     add(i,i-1,i-2);
    for(int i=cnt[n];i;--i)
    {
            cout<<f[n][i];
    }
    cout<<endl;
    return 0;
}
/**************************************************************
    Problem: 4562
    User: contest21_42
    Language: C++
    Result: 正确
    Time:3 ms
    Memory:26424 kb
****************************************************************/