Cod sursa(job #1925191)

Utilizator dsergiu05Sergiu Druga dsergiu05 Data 12 martie 2017 16:28:58
Problema A+B Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.27 kb
#include <fstream>
#include <vector>

using namespace std;

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

string buffer;
string::iterator it;

void h_read (vector <int> &x) {
    while (*it<'0' || *it>'9') {
        it++;
    }
    x.resize(0);
    while (*it>='0' && *it<='9')  {
        x.push_back(*it-'0');
        it++;
    }
    for (int i=0; 2*i<int(x.size()); i++) {
        int aux=x[i];
        x[i]=x[int(x.size())-i-1];
        x[int(x.size())-i-1]=aux;
    }
}

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

/*vector <int> hh_add(vector <int> &x, vector <int> &y) {
    vector <int> sol;
    sol.resize(max(x.size(), y.size()), 0);
    int aux=0;
    for (int i=0; i<int(x.size()) || i<int(y.size()); i++) {
        if (i<int(x.size())) {
            sol[i]+=x[i];
        }
        if (i<int(y.size())) {
            sol[i]+=y[i];
        }
        sol[i]+=aux;
        aux=sol[i]/10;
        sol[i]%=10;
    }
    if (aux!=0) {
        sol.push_back(aux);
    }
    return sol;
}
*/
vector <int> hh_add(vector <int> &x, vector <int> &y) {
    vector <int> sol;
    if (x.size()<y.size()) {
        sol.resize(y.size());
        int aux=0;
        for (int i=0; i<int(x.size()); i++) {
            sol[i]=x[i]+y[i]+aux;
            aux=sol[i]/10;
            sol[i]%=10;
        }
        for (int i=int(x.size()); i<int(y.size()); i++) {
            sol[i]=y[i]+aux;
            aux=sol[i]/10;
            sol[i]%=10;
        }
        if (aux!=0) {
            sol.push_back(aux);
        }
    } else {
        sol.resize(x.size());
        int aux=0;
        for (int i=0; i<int(y.size()); i++) {
            sol[i]=y[i]+x[i]+aux;
            aux=sol[i]/10;
            sol[i]%=10;
        }
        for (int i=int(y.size()); i<int(x.size()); i++) {
            sol[i]=x[i]+aux;
            aux=sol[i]/10;
            sol[i]%=10;
        }
        if (aux!=0) {
            sol.push_back(aux);
        }
    }
    return sol;
}

int main () {
    getline(fin, buffer, char(0));
    it=buffer.begin();
    vector <int> x, y, z;

    h_read(x);
    h_read(y);

    z=hh_add(x, y);
    h_write(z);

    fout<<"\n";
    return 0;
}