Cod sursa(job #873644)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 7 februarie 2013 15:08:39
Problema Nunta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#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;
}