Cod sursa(job #1010468)

Utilizator Athena99Anghel Anca Athena99 Data 14 octombrie 2013 22:53:17
Problema A+B Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.78 kb
#include <fstream>
#include <string>
#include <vector>

using namespace std;

ifstream fin("adunare.in");
ofstream fout("adunare.out");

const int base= 10000;

string s;

void h_read ( vector <int> &x ) 
{
    fin>>s;
    x.resize((s.size()+3)/4);
    for ( int i= 0; i<(int)s.size(); ++i ) { 
        x[((int)s.size()-i-1)/4]= x[((int)s.size()-i-1)/4]*10+s[i]-'0';
    }
}

void h_write( vector <int> x ) {
    for ( int i= (int)x.size()-1; i>=0; --i ) {
        fout<<x[i];
    }
}

void hh_add ( vector <int> &x, vector <int> &y )
{
    int t= 0;
    for ( int i= 0; i<(int)x.size() || i<(int)y.size() || t!=0; ++i ) {
        if ( i>=(int)x.size() ) {
            x.push_back(t);
        } else {
            x[i]+= t;
        }

        if ( i<(int)y.size() ) {
            x[i]+= y[i];
        }
        t= x[i]/base;
        x[i]%= base;
    }
}

void hh_sub ( vector <int> &x, vector <int> y ) 
{
    for ( int i= 0; i<(int)x.size(); ++i ) {
        x[i]-= y[i];
        if ( x[i]<0 ) {
            x[i]+= base;
            --x[i+1];
        }
    }

    while ( x.back()==0 ) {
        x.pop_back();
    }
}

void hn_mult( vector <int> &x, int y )
{
    int t= 0;
    for ( int i= 0; i<(int)x.size() || t!=0; ++i ) {
        if ( i>=(int)x.size() ) {
            x.push_back(0);
        }

        x[i]= x[i]*y+t;
        t= x[i]/base;
        x[i]%= base;
    }
}

void hn_div (vector <int> &x, int y ) 
{
    for ( int i= (int)x.size()-1; i>=1; --i ) {
        x[i-1]+= x[i]%y*base;
        x[i]/= y;
    }
    x[0]/= y;

    while ( x.size()>=2 && x.back()==0 ) {
        x.pop_back();
    }
}

int main(  )
{
    vector <int> a, b, c;
    h_read(a);
    c= a;
    h_read(b);

    hn_mult(a, 17);
    hn_mult(b, 16);
    hh_add(a, b);
    hh_sub(a, c);
    hn_div(a, 16);

    h_write(a);

    return 0;
}