Cod sursa(job #879285)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 15 februarie 2013 10:43:20
Problema Nunta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#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;
}