HbugU @ 2022-05-20 13:08:01
#include<bits/stdc++.h>
using namespace std;
int n;
string f[5005];
string add(string as,string bs){
string ans;
int a[101]={0},b[101]={0},c[101]={0};
int lena=as.length(),lenb=bs.length();
for(int i=lena-1,j=1;i>=0;i--,j++){
a[j]=as[i]-'0';
}
for(int i=lenb-1,j=1;i>=0;i--,j++){
b[j]=bs[i]-'0';
}
int len=max(lena,lenb);
for(int i=1;i<=len;i++){
c[i]+=a[i]+b[i];
c[i+1]+=c[i]/10;
c[i]%=10;
}
if(c[len+1]) ++len;
for(int i=len;i>=1;i--){
ans+=c[i]+'0';
}
return ans;
}
int main(){
cin>>n;
f[1]="1",f[2]="2";
for(int i=3;i<=n;i++){
f[i]=f[i-1]+f[i-2];
}
cout<<f[n];
return 0;
}
by Hisaishi_Kanade @ 2022-05-20 13:11:57
@HbugU
f=[0,1,2]
n=int(input())
if n<3:
print(f[n])
else:
for i in range(3,n+20):
f.append(f[i-1]+f[i-2])
print(f[n])
by Fcersoka @ 2022-05-21 09:10:18
自己看看吧......
#include<bits/stdc++.h>
using namespace std;
int n,f1[1000001],f2[1000001],f0[1000001],len1=1,len2=1,len0;
void jf(){//相加
for(int i=1;i<=len2;i++)
f2[i]=0;
for(int i=1;i<=max(len1,len0);i++){
f2[i]+=f1[i]+f0[i];
if(f2[i]>=10)
{
f2[i+1]+=f2[i]/10;
f2[i]%=10;
}
}
len2=max(len1,len0);
if(f2[len2+1])
len2++;
}
void f01(){
for(int i=1;i<=len0;i++)
f0[i]=0;
for(int i=1;i<=len1;i++)
f0[i]=f1[i];
len0=len1;
}
void f12(){
for(int i=1;i<=len1;i++)
f1[i]=0;
for(int i=1;i<=len2;i++)
f1[i]=f2[i];
len1=len2;
}
int main(){
cin>>n;
f0[1]=1;
f1[1]=2;
if(n==1){
cout<<1;
return 0;
}
else if(n==0){
cout<<0;
return 0;
}
for(int i=3;i<=n;i++){
jf();
f01();
f12();
}
for(int i=len2;i>0;i--)
cout<<f2[i];
return 0;
}