Cod sursa(job #1787444)

Utilizator Y.MalmsteenB.P.M. Y.Malmsteen Data 24 octombrie 2016 17:52:27
Problema Nunta Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <cstdio>

using namespace std;

const int MAXN = 220;
int N;
unsigned char *M1, *M2, *M3, *AX;

void afisare(unsigned char A[])
{
    FILE *g;
    g = fopen("nunta.out", "w");
    for(int i = A[0]; i >= 1; i--)
        fprintf(g, "%d ", A[i]);
    fclose(g);
}

void add(unsigned char A[], unsigned char B[], unsigned char C[])
{
    int i, t = 0;
    for(i = 1; i <= A[0] || i <= B[0] || t; i++, t /= 10)
        C[i] = (t += A[i] + B[i]) % 10;
    C[0] = i - 1;
}

int main()
{
    FILE *f;
    f = fopen("nunta.in", "r");
    fscanf(f, "%d", &N);
    fclose(f);
    M1 = new unsigned char[MAXN];
    M2 = new unsigned char[MAXN];
    M3 = new unsigned char[MAXN];
    M1[0] = M2[0] = M3[0] = 1;
    for(int i = 1; i < MAXN; i++)
        M1[i] = M2[i] = M3[i] = 0;
    if(N == 0 || N == 1)
        M2[1] = N;
    else
    {
        M1[1] = 1, M2[1] = 2;
        for(int i = 3; i <= N; i++)
        {
            add(M1, M2, M3);
            AX = M1;
            M1 = M2;
            M2 = M3;
            M3 = AX;
        }
    }
    afisare(M2);
    return 0;
}