Cod sursa(job #1400715)

Utilizator victormarinMarin Victor victormarin Data 25 martie 2015 13:29:05
Problema Nunta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <cstdio>
#define filein "nunta.in"
#define fileout "nunta.out"
using namespace std;

short int nr1[5001], nr2[5001], rez[5001];
int N;

void ReadData();
void PrintData();

void Solve();
void Add();
void Copy(short int *source, short int *destination);

int main()
{
    ReadData();
    Solve();
    PrintData();
    return 0;
}

void ReadData()
{
    FILE *in;
    in=fopen(filein,"r");
    fscanf(in,"%d",&N);
    fclose(in);
}

void PrintData()
{
    FILE *out;
    out=fopen(fileout,"w");
    register int i;
    for (i=rez[0]; i>=1; i--)
        fprintf(out,"%d",rez[i]);
    fclose(out);
}

void Solve()
{
    if (N==1)
    {
        rez[0]=1;
        rez[1]=1;
    }
    else if (N==2)
    {
        rez[0]=1;
        rez[1]=2;
    }
    else
    {
        nr1[0]=1;
        nr2[0]=1;
        nr1[1]=1;
        nr2[1]=2;
        N-=2;
        while (N)
        {
            Add();
            Copy(nr2,nr1);
            Copy(rez,nr2);
            N--;
        }
    }
}

void Add()
{
    register int i;
    int t=0;
    rez[0]=nr2[0];
    for (i=1; i<=rez[0]; i++)
    {
        t+=(nr1[i]+nr2[i]);
        if (t>9)
        {
            rez[i]=t%10;
            t=1;
        }
        else
        {
            rez[i]=t;
            t=0;
        }
    }
    if (t)
        rez[++rez[0]]=t;
}

void Copy(short int *source, short int *destination)
{
    register int i;
    for (i=1; i<=source[0]; i++)
        destination[i]=source[i];
    destination[0]=source[0];
    i=destination[0]+1;
    while (i<=5000 && destination[i])
        destination[i++]=0;
}