Cod sursa(job #934861)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 31 martie 2013 19:40:08
Problema Nunta Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <iostream>
#include <cstdio>

using namespace std;

typedef short int BigNumber[300];

BigNumber A, B, C;

int N;

void copiaza( BigNumber a, BigNumber b ){

    a[0] = b[0];

    for ( int i = 1; i <= b[0]; i++ )
        a[i] = b[i];
}

void init( BigNumber a ){

    a[0] = a[1] = 1;
}

void reinit( BigNumber a ){

    for(int i = 0; i < 500; i++)
        a[i] = 0;
}

void aduna( BigNumber a, BigNumber b ){

    a[0] = max ( a[0], b[0] );

    int T = 0;

    for ( int i = 1; i <= a[0]; i++ )
        a[i] += b[i] + T,
        T = a[i] / 10,
        a[i] %= 10;

    if ( T )
        a[ ++a[0] ] = T;
}

void afis( BigNumber a ){

    freopen("nunta.out", "w", stdout);

    for(int i = a[0]; i; i--)
        printf("%d", a[i]);
}

void rezolva(){

    init(A);
    init(B);

    if ( N == 1 || N == 2 ){

        afis(A);
        return;
    }

    for(int i = 3; i <= N; i++){

        reinit(C);
        aduna(C, A);
        aduna(C, B);

        copiaza(A, B);
        copiaza(B, C);
    }

    afis(C);
}

int main(){

    freopen("nunta.in", "r", stdin);

    scanf("%d", &N);

    rezolva();

    return 0;
}