Cod sursa(job #919437)

Utilizator apopeid13Apopeid Alejandro apopeid13 Data 19 martie 2013 17:39:27
Problema Nunta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <cstdio>
#include <cstring>
 
const int BASE(1000000);
const int DIGITS(6);
const int MAX_SIZE(300);
 
int a [MAX_SIZE], b [MAX_SIZE], c [MAX_SIZE];
int n;
 
inline void read (void)
{
    std::freopen("nunta.in","r",stdin);
    std::scanf("%d",&n);
    std::fclose(stdin);
}
 
inline void print (void)
{
    std::freopen("nunta.out","w",stdout);
    std::printf("%d",c[c[0]]);
    for (int index(c[0] - 1) ; index ; --index)
        std::printf("%.6d",c[index]);
    std::putchar('\n');
    std::fclose(stdout);
}
 
inline void add (int a [ ], int b [ ])
{
    int i, t(0);
    for (i = 1 ; i <= a[0] || i <= b[0] || t ; ++i, t /= BASE)
        a[i] = (t += a[i] + b[i]) % BASE;
    a[0] = i - 1;
}
 
inline void Fibbonaci (void)
{
    if (n == 1)
    {
        c[0] = c[1] = 1;
        return;
    }
    a[0] = b[0] = a[1] = b[1] = 1;
    for (int counter(1) ; counter < n ; ++counter)
    {
        std::memset(c,0,(c[0] + 1) * sizeof(int));
        add(c,a);
        add(c,b);
        std::memcpy(a,b,(b[0] + 1) * sizeof(int));
        std::memcpy(b,c,(c[0] + 1) * sizeof(int));
    }
}
 
int main (void)
{
    read();
    Fibbonaci();
    print();
    return 0;
}