Cod sursa(job #238090)

Utilizator Omega91Nicodei Eduard Omega91 Data 31 decembrie 2008 15:47:36
Problema Nunta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <cstdio>
#include <cstring>

void add(unsigned int x[], unsigned int y[], unsigned int s[])
{
	int i, t = 0, l = x[0] > y[0] ? x[0] : y[0];
	for (i = 1; i <= l || t; ++i) {
		t = t + x[i] + y[i];
		s[i] = t % 10;
		t /= 10;
	}
	s[0] = (i - 1);
}

char* fibo(int N)
{
	const int MDIG = 500;
	char* ans = new char[MDIG];
	unsigned int e1[MDIG] = {1, 0}, e2[MDIG] = {1, 1}, s[MDIG] = {1, 0}, k = 0;
	int i;
	for (i = 1; i <= N; ++i) {
		add(e1, e2, s);
		memcpy(e1, e2, sizeof(unsigned int) * MDIG);
		memcpy(e2, s, sizeof(unsigned int) * MDIG);
	}
	for (i = s[0]; i != 0; --i) ans[k++] = s[i] + '0';
	return ans;
}



int main()
{
	int N;
	char *s;
	freopen("nunta.in", "r", stdin);
	freopen("nunta.out", "w", stdout);
	scanf("%d", &N);
	s = fibo(N);
	printf("%s\n", s);
	delete[] s;
	fclose(stdin);
	fclose(stdout);
	return 0;
}