代码丑陋,见谅。
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const int N=1e5+10;
ull num[N];
int solv(int w,int *a,int lena,int *b,int lenb,int k)
{
if(w==k)
{
for(int i=lenb;i>=0;i--)
printf("%d",b[i]);
return 0;
}
int lenc=0,up=0;
int c[N]={0};
while(lenc<=lena||lenc<=lenb)
{
c[lenc]=a[lenc]+b[lenc]+up;
up=c[lenc]/10;
c[lenc]%=10;
lenc++;
}
c[lenc]=up;
if(c[lenc]==0) lenc--;
solv(w+1,b,lenb,c,lenc,k);
}
int main()
{
int n;
cin>>n;
num[0]=0,num[1]=1,num[2]=2;
if(n<=2)
printf("%llu\n",num[n]);
else if(n<100)
{
for(int i=3;i<=n;i++)
num[i]=num[i-1]+num[i-2];
printf("%llu\n",num[n]);
}
else {
int a[N]={0},b[N]={0};
a[0]=1,b[0]=2;
solv(3,a,0,b,0,n);
}
return 0;
}