Cod sursa(job #881918)

Utilizator alex_unixPetenchea Alexandru alex_unix Data 18 februarie 2013 19:13:06
Problema Nunta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 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;
}