#include <cmath>
#include <iostream>
using namespace std;
class nums
{
private:
long iUp,iDn;
public:
nums()
{
iUp=0;
iDn=1;
}
void simplification();
void record(double iA,double iB);
void irecord(long iA,long iB);
long return_Up();
long return_Dn();
void display();
friend nums operator + (nums nA,nums nB);
friend nums operator - (nums nA,nums nB);
friend nums operator * (nums nA,nums nB);
friend nums operator / (nums nA,nums nB);
};
void nums::display()
{
if (return_Dn()!=1)
{
cout<<return_Up()<<"/"<<return_Dn();
}
else
{
cout<<return_Up();
}
}
void nums::record(double iA,double iB=1)
{
while ((floor(iA)!=iA)||(floor(iB)!=iB))
{
iA*=10;
iB*=10;
}
iUp=(long) iA;
if (iB!=0)
{
iDn=(long) iB;
}
simplification();
}
void nums::irecord(long iA,long iB)
{
iUp=iA;
iDn=iB;
}
void nums::simplification()
{
int iT,iA,iB;
if (iUp>=iDn)
{
iA=iUp;
iB=iDn;
}
else
{
iA=iDn;
iB=iUp;
}
while (iB!=0)
{
iT=iA;
iA=iB;
iB=iT%iA;
}
iUp/=iA;
iDn/=iA;
if (iDn<0)
{
iDn=-iDn;
iUp=-iUp;
}
}
long nums::return_Up()
{
return iUp;
}
long nums::return_Dn()
{
return iDn;
}
nums operator + (nums nA,nums nB)
{
nums nC;
nC.irecord(nA.return_Up()*nB.return_Dn()+nA.return_Dn()*nB.return_Up(),nA.return_Dn()*nB.return_Dn());
nC.simplification();
return nC;
}
nums operator - (nums nA,nums nB)
{
nums nC;
nC.irecord(nA.return_Up()*nB.return_Dn()-nA.return_Dn()*nB.return_Up(),nA.return_Dn()*nB.return_Dn());
nC.simplification();
return nC;
}
nums operator * (nums nA,nums nB)
{
nums nC;
nC.irecord(nA.return_Up()*nB.return_Up(),nA.return_Dn()*nB.return_Dn());
nC.simplification();
return nC;
}
nums operator / (nums nA,nums nB)
{
nums nC;
nC.irecord(nA.return_Up()*nB.return_Dn(),nA.return_Dn()*nB.return_Up());
nC.simplification();
return nC;
}