Cod sursa(job #1715866)

Utilizator cristina_borzaCristina Borza cristina_borza Data 11 iunie 2016 16:15:01
Problema Nunta Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.76 kb
#include <cstdio>

#define BASE 100

using namespace std;

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

short int n , x , aux , t;
char A[105] , B[105];

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

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

    A[1] = A[0] = 1;
    B[1] = B[0] = 1;

    for (short int i = 1; i <= n; ++i) {
        t = 0;
        A[0] = B[0];
        for (short int j = 1; j <= B[0]; ++j) {
            x = A[j];
            A[j] = B[j];

            aux = B[j] + t + x;
            t = aux / BASE;
            B[j] = aux % BASE;
        }

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

    fprintf(g , "%d", (short int)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", (short int)A[i]);
    }
}

void adun(char A[] , char B[] , char C[]) {
    short 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 / BASE;
        A[i] = aux % BASE;
    }

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

void copie(char A[] , char 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(char 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]);
    }
}