Cod sursa(job #1870289)

Utilizator ArambasaVlad Arambasa Arambasa Data 6 februarie 2017 15:45:21
Problema A+B Scor 30
Compilator cpp Status done
Runda Lista lui wefgef Marime 1.87 kb
#include <fstream>
#include <bitset>
using namespace std;
#define read in>>
#define write out<<
#define I32 int
#define B1 bitset<1>
class StreamClass
{
    private:
    string name="adunare";
    public:
    string Reader()
    {
        string arg=name;
        arg+=".in";
        return arg;
    }
    string Writer()
    {
        string arg=name;
        arg+=".out";
        return arg;
    }
}Stream;
class ElementsClass
{
    private:

    public:
    I32 ValueDec;
    void TurnToBin()
    {
        for (I32 i=0;i<(1<<5);i++)
        {
            ValueBin[i]=ValueDec%(1<<1);
            ValueDec/=1<<1;
        }
    }
    void TurnToDec()
    {
        ValueDec=0;
        for (I32 i=0;i<(1<<5);i++)
        {
            ValueDec+=ValueBin[i]<<i;
        }
    }
    bitset <1<<5> ValueBin;
    void SetVal(I32 arg)
    {
        ValueDec=arg;
        TurnToBin();
    }
    I32 GetVal()
    {
        return ValueDec;
    }
    //DECI ASA SE ADUNA. DA?
    ElementsClass operator +(ElementsClass ECarg)
    {
        ElementsClass Ret;
        bool Transport;
        bool Sum;
        for (I32 i=0;i<(1<<5);i++)
        {
            Sum=(ECarg.ValueBin[i]^this->ValueBin[i])^Transport;
            Transport=((ECarg.ValueBin[i] && this->ValueBin[i]) || (ECarg.ValueBin[i] && Transport) || (this->ValueBin[i] && Transport))?1:0;
            ECarg.ValueBin[i]=ECarg.ValueBin[i]^Sum;
            Sum=Sum^ECarg.ValueBin[i];
            ECarg.ValueBin[i]=ECarg.ValueBin[i]^Sum;
        }
        ECarg.TurnToDec();
        return ECarg;
    }
}A,B;

ifstream in (Stream.Reader().c_str());
ofstream out (Stream.Writer().c_str());

inline void Read()
{
    I32 aux;
    read aux;
    A.SetVal(aux);
    read aux;
    B.SetVal(aux);
}

int main()
{
    Read();
    A = A+B;
    write A.ValueDec-1;
    return 0;
}