Cod sursa(job #1715843)

Utilizator cristina_borzaCristina Borza cristina_borza Data 11 iunie 2016 15:43:51
Problema Nunta Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <cstring>
#include <cstdio>

#define BASE 1000000

using namespace std;

int v1[40] , v2[40] , v3[40];
int n;

void adun(int A[] , int B[] , int C[]);
void copie(int A[] , int B[]);
void afis(int A[]);

int main() {
    freopen("nunta.in" , "r" , stdin);
    freopen("nunta.out" , "w" , stdout);
    scanf("%d" , &n);

    v1[1] = v1[0] = 1;
    v2[1] = v2[0] = 1;
    v3[1] = v3[0] = 1;

    for (int i = 2; i <= n; ++i) {
        adun(v3 , v2 , v1);
        copie(v1 , v2);
        copie(v2 , v3);
    }

    afis(v3);
}

void adun(int A[] , int B[] , int C[]) {
    int t = 0;

    memset(A , 0 , sizeof(A));
    A[0] = B[0];

    for (int i = 1; i <= B[0]; ++i) {
        A[i] = B[i] + C[i] + t;
        t = A[i] / BASE;
        A[i] %= BASE;
    }

    while (t) {
        A[++A[0]] = t % BASE;
        t /= BASE;
    }
}

void copie(int A[] , int B[]) {
    memset(A , 0 , sizeof(A));
    for (int i = 0; i <= B[0]; ++i) {
        A[i] = B[i];
    }
}


void afis(int A[]) {
    printf("%d", A[A[0]]);
    for (int  i = A[0] - 1; i > 0; --i) {
        int x = A[i] , nr = 0;
        if (x == 0)
            nr = 1;

        while (x) {
            ++nr;
            x /= 10;
        }

        for(int j = nr + 1; j <= 6; ++j) {
            printf("0");
        }

        printf("%d", A[i]);
    }
}