#include<bits/stdc++.h> using namespace std; string he(string s1,string s2){ int a[2500]={0},b[2500]={0},c[2500]={0}; string r; //逆序 for(int i=0;i<s1.size();i++) a[i]=s1[s1.size()-1-i]-'0'; for(int i=0;i<s2.size();i++) b[i]=s2[s2.size()-1-i]-'0'; //算相加的长度 int len=max(s1.size(),s2.size()); //相加 for(int i=0;i<len;i++){ c[i]=a[i]+b[i]+c[i]; if(c[i]>=10){ c[i+1]+=c[i]/10; c[i]%=10; } } //判断第len位是不是0 if(c[len]!=0) len++; //倒序输出 for(int i=len-1;i>=0;i--){ r=r+(char)(c[i]+'0'); } return r; } string cheng (string s){ string r; int a[2500]={0}; for(int i=0;i<s.size();i++){ a[i]=s[s.size()-1-i]-'0'; } for(int i=0;i<s.size();i++){//逐位乘2 a[i]=a[i]*2; } //逐位进位 for(int i=0;i<s.size();i++){ if(a[i]>=10){ a[i+1]=a[i+1]+a[i]/10; a[i]=a[i]%10; } } //判断是否多出一位 int len=s.size(); if(a[len]!=0) len++; for(int i=len-1;i>=0;i--){ r=r+(char)(a[i]+'0'); } return r; } int main(){ long long n; string x,y,z; cin>>n; x="1";//第一项 y="2";//第二项 if(n==1) cout<<x; else if(n==2) cout<<y; else{ for(int i=3;i<=n;i++){//从第3项开始,上一项*2,上一项是y,然后加上前第2项 z=he(cheng(y),x); x=y;//修改x,y的值,然后逐步向后推导 y=z; } cout<<z; } return 0; } /************************************************************** Problem: 1369 User: hulaoshi Language: C++ Result: Accepted Time:34 ms Memory:2208 kb ****************************************************************/