#include<bits/stdc++.h>
using namespace std;
int a[20005],b[20005],c[20005];
int main(){
//a[i]=a[i-1]+a[i-2];
int n;
cin>>n;
a[0]=1;//加数1
b[0]=2;//加数2
int A=1;//数位长度
int jw=0;//进位
for(int i=3;i<=n;i++){//从第3个开始算
jw=0;
for(int j=0;j<A;j++){//做加法
c[j]=a[j]+b[j]+jw;
jw=c[j]/10;//大于等于10有进位
c[j]=c[j]%10;//保留个位
}
if(jw==1){//数位变多了
c[A]=1;
A++;//记录数位增加了
}
for(int k=0;k<A;k++){
a[k]=b[k];
b[k]=c[k];
}
}
if(n==1)
cout<<1;
else if(n==2)
cout<<2;
else {
for(int i=A-1;i>=0;i--)
cout<<c[i];
}
return 0;
}
-- jzlb_gzj
Problem ID | Title | Solved | Submit | |
A | §1 6 求斐波那契数列 | 9 | 11 | |
B | §2 3 菲波那契数列(2) | 4 | 46 | |
C | §2 3 Pell数列 | 7 | 31 | |
D | 例3.3 骨牌铺方格 | 9 | 64 | |
E | 爬楼梯 2 | 5 | 14 | |
F | 爬楼梯 3 | 4 | 12 | |
G | §2 3 【例3.4】昆虫繁殖 | 3 | 12 |