Cod sursa(job #935230)

Utilizator mvcl3Marian Iacob mvcl3 Data 2 aprilie 2013 12:37:41
Problema Nunta Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <string.h>
#include <assert.h>
#define maxSize 300
#ifndef BIGNUMBER_H
#define BIGNUMBER_H
#include <cstdio>
using namespace std;
class BigNumber
{
    public:
        BigNumber();
        BigNumber(int, int);
        const BigNumber& operator=(const BigNumber& other);
        const BigNumber& operator+=(const BigNumber& other);
        void write_Data()
        {
            freopen("nunta.out", "w", stdout);
            for(int i = this->a[0]; i; -- i) printf("%d", this->a[i]);
        }
    protected:
    private:
        int *a;
};

#endif

BigNumber :: BigNumber()
{
    a = new int[maxSize];
    for(int i = 0; i < maxSize; ++i) a[i] = 0;
}

BigNumber :: BigNumber(int x, int y)
{
    a = new int[maxSize];
    a[0] = x, a[1] = y;
}

const BigNumber& BigNumber :: operator=(const BigNumber& other)
{
    assert(a);

    a = new int[maxSize];
    for(int i = 0; i <= other.a[0]; ++i) a[i] = other.a[i];

    return *this;
}

const BigNumber& BigNumber :: operator+=(const BigNumber& other)
{
    //BigNumber rez(*this);
    int i, t;
    int n = this->a[0], m = other.a[0];
    for(i = 1, t = 0; i <= n || i <= m || t; ++i, t /= 10)
        this->a[i] = (t += this->a[i] + other.a[i]) % 10;
    this->a[0] = i - 1;
    return *this;
}

int n;

int main() {
    freopen("nunta.in", "rt", stdin);
    scanf("%d", &n);

    if(n <= 2)
    {
        freopen("nunta.out", "wt", stdin);
        printf("%d\n", n);
    }
    else
    {
        BigNumber A(1, 1);
        BigNumber B(1, 2);
        BigNumber C;
        for(int i = 3; i <= n; ++i) {
            C = A;
            C += B;
            A = B;
            B = C;
        }
        C.write_Data();
    }
}