//使用高精度来进行求解
#include<iostream>
#include<cstring>
using namespace std;
struct big_num{
int a[10005];//用来储存大数字
int len;//这个大数字的长度
big_num(int x=0){//默认值为0
memset(a,0,sizeof(a));//初始化这个数组
for(len=1;x;len++){
a[len]=a[len]+x%10;
x/=10;
}
len--;
}
int &operator[](int i){//重载了一下这个[]使得c[2]=c.a[2];
return a[i];
}
void flatten(int L){
len=L;
for(int i=1;i<=len;i++){
a[i+1]+=a[i]/10;
a[i]%=10;
}
for(;!a[len];) len--;
}
void print(){
for(int i=len;i>=1;i--){
cout<<a[i];
}
}
};
big_num operator +(big_num a,big_num b){
big_num c;
int len=max(a.len,b.len);
for(int i=1;i<=len;i++)
{
c[i]+=a[i]+b[i];
}
c.flatten(len+1);
return c;
}
int main(){
int n;
cin>>n;
big_num a[n+1];//用来储存每一步数量的大小
a[1]=big_num(1);
a[2]=big_num(2);
for(int i=3;i<=n;i++)
{
a[i]=a[i-2]+a[i-1];
}
a[n].print() ;
return 0;
}
感觉就是一个正常的高精度思路?但是过不了最后一个数据点……