Cod sursa(job #1715500)

Utilizator ade_tomiEnache Adelina ade_tomi Data 10 iunie 2016 21:56:30
Problema Nunta Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include<iostream>
#include<fstream>
#include<vector>
#define base 10
using namespace std;
typedef vector<char> bigint;

istream &operator >> (istream &f , bigint & x)
{

    int i;
    x.clear();
    string s;
    f>>s;
    for(i=0;i<s.size();i++)
        x.push_back(s[i]-'0');
    return f;
}
ostream &operator << (ostream &g, bigint &x)
{

    for(int i=0;i<x.size();i++)
        g<<(int)x[i];
    return g;
}

bigint operator  + (const bigint &a, const bigint &b)
{
    int t=0;
    bigint x(a),y(b), z(max(a.size(),b.size()),0);
    if(x.size()<y.size()) x.insert(x.begin(),y.size()-x.size(),0);
    if(y.size()<x.size()) y.insert(y.begin(),x.size()-y.size(),0);

    for(int i=0;i<z.size();i++){


        z[i]=x[i]+y[i];
        //cout<<z[i];
    }
    for(int i=z.size()-1;i>=0;i--)
    {
        z[i]+=t;
        t=z[i]/base;
        z[i]=z[i]%base;


    }
   // cout<<t<<"\n";
    while(t!=0)
    {
        z.insert(z.begin(),1,0);
        z[0]=t%base;
        t/=base;

    }
    return z;
}
int main()
{
    int n;
    bigint a,b,y;
    ifstream cin("nunta.in");
    ofstream cout("nunta.out");
    cin>>n;
    if(n<4)
        cout<<n;
    else
    {
        a.push_back(2);
        b.push_back(3);
        for(int i=4;i<=n;i++)
        {
            y=a+b;
            a=b;
            b=y;
        }
        cout<<b;

    }
    return 0;
}