Cod sursa(job #879285)
#include <cstdio>
#define l_max 1000
struct mare
{
short int v[l_max];
};
void init(mare &a)
{
int i;
for(i=0;i<l_max;i++)
a.v[i]=0;
}
int maxim(int a,int b)
{
if(a>b)
return a;
return b;
}
mare suma(mare &a,mare &b)
{
mare aux;
init(aux);
aux.v[0]=maxim(a.v[0],b.v[0])+1;
int i;
int transport=0;
for(i=1;i<=aux.v[0];i++)
{
aux.v[i]=a.v[i]+b.v[i]+transport;
transport=aux.v[i]/10;
aux.v[i]%=10;
}
while(aux.v[aux.v[0]]==0)
{
aux.v[0]--;
}
return aux;
}
void afis(mare &a)
{
int i;
for(i=a.v[0];i>0;i--)
printf("%hd",a.v[i]);
printf("\n");
}
void init_scalar(mare &a,int x)
{
while(x>0)
{
a.v[a.v[0]+1]=x%10;
a.v[0]++;
x/=10;
}
}
int main()
{
freopen("nunta.in","r",stdin);
freopen("nunta.out","w",stdout);
mare a,b,c;
int n;
scanf("%d",&n);
if(n==1)
{
printf("1\n");
return 0;
}
else if(n==2)
{
printf("2\n");
return 0;
}
init(a);
init(b);
init_scalar(a,1);
init_scalar(b,2);
int i;
for(i=2;i<n;i++)
{
init(c);
c=suma(a,b);
a=b;
b=c;
}
afis(c);
return 0;
}