Pagini recente » Cod sursa (job #961252) | Cod sursa (job #1418944) | Cod sursa (job #2983566) | Cod sursa (job #1404779) | Cod sursa (job #1870546)
#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;
void Subtract(bitset<32> &x, bitset<32> &y)
{
bool borrow = false;
for (int i = 0; i < 31; i++)
{
if (borrow)
{
if (x[i]) x[i] = y[i],borrow = y[i];
else x[i] = !y[i],borrow = true;
}
else
{
if (x[i]) x[i] = !y[i],borrow = false;
else x[i] = y[i], borrow = y[i];
}
}
}
class ElementsClass
{
private:
public:
I32 ValueDec;
void TurnToBin()
{
if (ValueDec<0)
ValueBin[31]=1;
else ValueBin[31]=0;
for (I32 i=0;i<(1<<5)-1;i++)
{
ValueBin[i]=ValueDec%(1<<1);
ValueDec/=1<<1;
}
}
void TurnToDec()
{
ValueDec=0;
for (I32 i=0;i<(1<<5)-1;i++)
{
ValueDec+=ValueBin[i]<<i;
}
ValueDec=(ValueBin[31]==1)?ValueDec*(0-1):ValueDec;
}
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;
if (ECarg.ValueBin[31]&&!this->ValueBin[31])
{
Subtract(this->ValueBin,ECarg.ValueBin);
for (I32 i=0;i<32;i++)
ECarg.ValueBin[i]=this->ValueBin[i];
}
else if (!ECarg.ValueBin[31]&&this->ValueBin[31])
{
Subtract(ECarg.ValueBin,this->ValueBin);
}
else
{
for (I32 i=0;i<(1<<5)-1;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)?0:1;
}
}
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;
}