Pagini recente » Cod sursa (job #610540) | Cod sursa (job #120852) | Cod sursa (job #20746) | Cod sursa (job #774006) | Cod sursa (job #238090)
Cod sursa(job #238090)
#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;
}