Pagini recente » Cod sursa (job #2308360) | Istoria paginii runda/eusebiu_oji_2005_cls11-12 | Cod sursa (job #1076016) | Cod sursa (job #1829399) | Cod sursa (job #873644)
Cod sursa(job #873644)
#include <cstdio>
#include <cstring>
#include <cassert>
using namespace std;
const int MaxDigits = 30;
const int Base = 1000000000;
inline void Add(int A[], int B[]) {
int i, T;
for (i = 1, T = 0; i <= A[0] || i <= B[0] || T > 0; ++i, T /= Base)
A[i] = (T += (A[i] + B[i])) % Base;
A[0] = i - 1;
}
void Print(int A[]) {
printf("%d", A[A[0]]);
for (int i = A[0] - 1; i > 0; --i)
printf("%.9d", A[i]);
printf("\n");
}
int main() {
assert(freopen("nunta.in", "r", stdin));
assert(freopen("nunta.out", "w", stdout));
int F[3][MaxDigits]; memset(F, 0, sizeof(F));
F[0][0] = F[0][1] = 1, F[1][0] = F[1][1] = 1;
int N; assert(scanf("%d", &N) == 1);
for (int i = 2; i <= N; ++i) {
memset(F[2], 0, sizeof(F[2]));
Add(F[2], F[0]), Add(F[2], F[1]);
memcpy(F[0], F[1], sizeof(F[1]));
memcpy(F[1], F[2], sizeof(F[2]));
}
Print(F[1]);
return 0;
}