Cod sursa(job #1715875)

Utilizator cristina_borzaCristina Borza cristina_borza Data 11 iunie 2016 16:29:10
Problema Nunta Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <cstdio>
#include <cstring>

typedef int hugeNR[225];

FILE*f = fopen("nunta.in" , "r");
FILE*g = fopen("nunta.out" , "w");

hugeNR v1, v2, v3;
short int n;

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

    for (short int i = 1; i <= A[0]; ++i) {
        A[i] = 0;
    }
    A[0] = B[0];

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

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

void copie(hugeNR A , hugeNR B) {
    for (short int i = 1; i <= A[0]; ++i) {
        A[i] = 0;
    }
    A[0] = 0;

    for (short int i = 0; i <= B[0]; ++i) {
        A[i] = B[i];
    }
}


void afis(hugeNR A) {
    fprintf(g , "%d", A[A[0]]);
    for (short int  i = A[0] - 1; i > 0; --i) {
        if((short int) A[i] < 10)
            fprintf(g , "0");
        fprintf(g , "%d", (int)A[i]);
    }
}

int main() {
    fscanf(f , "%hd" , &n);

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

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

    afis(v3);
}