https://vjudge.net/problem/UVA-10579
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<fstream>
const int N=2000;
using namespace std;
ofstream out;
struct bignumber{
int len;
int c[N];
void setnum(char s[]){
len=0;
for(int i=strlen(s)-1;i>=0;i--){
c[len++]=s[i]-'0';
}
}
}big[6*N];
void add(bignumber &a,bignumber &b,bignumber &c){
int i, carry=0;
c.len=a.len+b.len-1;
for (i=0;i<c.len;i++){
c.c[i] = carry + a.c[i] + b.c[i];
carry = c.c[i] / 10;
c.c[i] %= 10;
}
if(carry){
c.c[c.len++]=carry;
}else{
while(!c.c[c.len]){
c.len--;
}c.len++;
}
}
void print(int n){
n--;
for(int i=big[n].len-1;i>=0;i--){
printf("%d",big[n].c[i]);
out<<big[n].c[i];
}
}
int main(){
big[0].setnum("1");
big[1].setnum("1");
for(int i=2;i<4700;i++){
add(big[i-2],big[i-1],big[i]);
}
int n;
while(scanf("%d",&n)!=EOF){
print(n);
}
}