#include <iostream>
#include <cstdlib>
using namespace std;
class CPhanSo
{
private:
int tuSo;
int mauSo;
public:
void TaoPhanSo(int, int);
void InPhanSo();
CPhanSo ChuanHoaPS();
CPhanSo RutGonPS();
CPhanSo CongPS(CPhanSo);
CPhanSo TruPS(CPhanSo);
CPhanSo NhanPS(CPhanSo);
CPhanSo ChiaPS(CPhanSo);
private:
int UCLN(int, int);
};
CPhanSo CPhanSo::CongPS(CPhanSo ps)
{
this->tuSo = this->tuSo * ps.mauSo + ps.tuSo * this->mauSo;
this->mauSo = this->mauSo * ps.mauSo;
this->RutGonPS();
return *this;
}
CPhanSo CPhanSo::TruPS(CPhanSo ps)
{
this->tuSo = this->tuSo * ps.mauSo - ps.tuSo * this->mauSo;
this->mauSo = this->mauSo * ps.mauSo;
this->RutGonPS();
return *this;
}
CPhanSo CPhanSo::NhanPS(CPhanSo ps)
{
this->tuSo = this->tuSo * ps.tuSo;
this->mauSo = this->mauSo * ps.mauSo;
this->RutGonPS();
return *this;
}
CPhanSo CPhanSo::ChiaPS(CPhanSo ps)
{
if (ps.tuSo == 0)
{
cout << "Khong the chia cho phan so co tu so bang 0!";
return *this;
}
this->tuSo = this->tuSo * ps.mauSo;
this->mauSo = this->mauSo * ps.tuSo;
this->RutGonPS();
this->ChuanHoaPS();
return *this;
}
int CPhanSo::UCLN(int a, int b)
{
a = abs(a);
b = abs(b);
while (b != 0)
{
int r = a % b;
a = b;
b = r;
}
return a;
}
CPhanSo CPhanSo::RutGonPS()
{
int ucln = UCLN(tuSo, mauSo);
tuSo /= ucln;
mauSo /= ucln;
return *this;
}
CPhanSo CPhanSo::ChuanHoaPS()
{
if (tuSo < 0 && mauSo < 0)
{
tuSo = -tuSo;
mauSo = -mauSo;
}
if (tuSo > 0 && mauSo < 0)
{
tuSo = -tuSo;
mauSo = -mauSo;
}
return *this;
}
void CPhanSo::TaoPhanSo(int tuSo, int mauSo)
{
if (mauSo == 0)
{
cout << "Mau so khong hop le!";
}
else
{
this->tuSo = tuSo;
this->mauSo = mauSo;
}
}
void CPhanSo::InPhanSo()
{
cout << tuSo << "/" << mauSo;
}
int main()
{
CPhanSo ps, ps1, ps2;
ps.TaoPhanSo(1, 5);
ps1.TaoPhanSo(4, 10);
cout<< "\n";
ps2 = ps;
ps2.CongPS(ps1);
ps2.InPhanSo();
cout<< "\n";
ps2 = ps;
ps2.TruPS(ps1);
ps2.InPhanSo();
cout<< "\n";
ps2 = ps;
ps2.NhanPS(ps1);
ps2.InPhanSo();
cout<< "\n";
ps2 = ps;
ps2.ChiaPS(ps1);
ps2.InPhanSo();
cout<< "\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGxpYj4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBDUGhhblNvCnsKcHJpdmF0ZToKICAgIGludCB0dVNvOwogICAgaW50IG1hdVNvOwoKcHVibGljOgogICAgdm9pZCBUYW9QaGFuU28oaW50LCBpbnQpOwogICAgdm9pZCBJblBoYW5TbygpOwogICAgQ1BoYW5TbyBDaHVhbkhvYVBTKCk7CiAgICBDUGhhblNvIFJ1dEdvblBTKCk7CiAgICBDUGhhblNvIENvbmdQUyhDUGhhblNvKTsKICAgIENQaGFuU28gVHJ1UFMoQ1BoYW5Tbyk7CiAgICBDUGhhblNvIE5oYW5QUyhDUGhhblNvKTsKICAgIENQaGFuU28gQ2hpYVBTKENQaGFuU28pOwoKcHJpdmF0ZToKICAgIGludCBVQ0xOKGludCwgaW50KTsKfTsKCkNQaGFuU28gQ1BoYW5Tbzo6Q29uZ1BTKENQaGFuU28gcHMpCnsKICAgIHRoaXMtPnR1U28gPSB0aGlzLT50dVNvICogcHMubWF1U28gKyBwcy50dVNvICogdGhpcy0+bWF1U287CiAgICB0aGlzLT5tYXVTbyA9IHRoaXMtPm1hdVNvICogcHMubWF1U287CgogICAgdGhpcy0+UnV0R29uUFMoKTsKCiAgICByZXR1cm4gKnRoaXM7Cn0KCkNQaGFuU28gQ1BoYW5Tbzo6VHJ1UFMoQ1BoYW5TbyBwcykKewogICAgdGhpcy0+dHVTbyA9IHRoaXMtPnR1U28gKiBwcy5tYXVTbyAtIHBzLnR1U28gKiB0aGlzLT5tYXVTbzsKICAgIHRoaXMtPm1hdVNvID0gdGhpcy0+bWF1U28gKiBwcy5tYXVTbzsKCiAgICB0aGlzLT5SdXRHb25QUygpOwoKICAgIHJldHVybiAqdGhpczsKfQoKQ1BoYW5TbyBDUGhhblNvOjpOaGFuUFMoQ1BoYW5TbyBwcykKewogICAgdGhpcy0+dHVTbyA9IHRoaXMtPnR1U28gKiBwcy50dVNvOwogICAgdGhpcy0+bWF1U28gPSB0aGlzLT5tYXVTbyAqIHBzLm1hdVNvOwoKICAgIHRoaXMtPlJ1dEdvblBTKCk7CgogICAgcmV0dXJuICp0aGlzOwp9CgpDUGhhblNvIENQaGFuU286OkNoaWFQUyhDUGhhblNvIHBzKQp7CiAgICBpZiAocHMudHVTbyA9PSAwKQogICAgewogICAgICAgIGNvdXQgPDwgIktob25nIHRoZSBjaGlhIGNobyBwaGFuIHNvIGNvIHR1IHNvIGJhbmcgMCEiOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICB0aGlzLT50dVNvID0gdGhpcy0+dHVTbyAqIHBzLm1hdVNvOwogICAgdGhpcy0+bWF1U28gPSB0aGlzLT5tYXVTbyAqIHBzLnR1U287CgogICAgdGhpcy0+UnV0R29uUFMoKTsKICAgIHRoaXMtPkNodWFuSG9hUFMoKTsKCiAgICByZXR1cm4gKnRoaXM7Cn0KCmludCBDUGhhblNvOjpVQ0xOKGludCBhLCBpbnQgYikKewogICAgYSA9IGFicyhhKTsKICAgIGIgPSBhYnMoYik7CgogICAgd2hpbGUgKGIgIT0gMCkKICAgIHsKICAgICAgICBpbnQgciA9IGEgJSBiOwogICAgICAgIGEgPSBiOwogICAgICAgIGIgPSByOwogICAgfQoKICAgIHJldHVybiBhOwp9CgpDUGhhblNvIENQaGFuU286OlJ1dEdvblBTKCkKewogICAgaW50IHVjbG4gPSBVQ0xOKHR1U28sIG1hdVNvKTsKCiAgICB0dVNvIC89IHVjbG47CiAgICBtYXVTbyAvPSB1Y2xuOwoKICAgIHJldHVybiAqdGhpczsKfQoKQ1BoYW5TbyBDUGhhblNvOjpDaHVhbkhvYVBTKCkKewogICAgaWYgKHR1U28gPCAwICYmIG1hdVNvIDwgMCkKICAgIHsKICAgICAgICB0dVNvID0gLXR1U287CiAgICAgICAgbWF1U28gPSAtbWF1U287CiAgICB9CgogICAgaWYgKHR1U28gPiAwICYmIG1hdVNvIDwgMCkKICAgIHsKICAgICAgICB0dVNvID0gLXR1U287CiAgICAgICAgbWF1U28gPSAtbWF1U287CiAgICB9CgogICAgcmV0dXJuICp0aGlzOwp9Cgp2b2lkIENQaGFuU286OlRhb1BoYW5TbyhpbnQgdHVTbywgaW50IG1hdVNvKQp7CiAgICBpZiAobWF1U28gPT0gMCkKICAgIHsKICAgICAgICBjb3V0IDw8ICJNYXUgc28ga2hvbmcgaG9wIGxlISI7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgdGhpcy0+dHVTbyA9IHR1U287CiAgICAgICAgdGhpcy0+bWF1U28gPSBtYXVTbzsKICAgIH0KfQoKdm9pZCBDUGhhblNvOjpJblBoYW5TbygpCnsKICAgIGNvdXQgPDwgdHVTbyA8PCAiLyIgPDwgbWF1U287Cn0KCmludCBtYWluKCkKewogICAgQ1BoYW5TbyBwcywgcHMxLCBwczI7CiAgICAKICAgIHBzLlRhb1BoYW5TbygxLCA1KTsKICAgIHBzMS5UYW9QaGFuU28oNCwgMTApOwogICAgY291dDw8ICJcbiI7CiAgICAKICAgIHBzMiA9IHBzOwogICAgcHMyLkNvbmdQUyhwczEpOyAgIAogICAgcHMyLkluUGhhblNvKCk7CiAgICBjb3V0PDwgIlxuIjsKICAgIAogICAgcHMyID0gcHM7CiAgICBwczIuVHJ1UFMocHMxKTsgICAKICAgIHBzMi5JblBoYW5TbygpOwogICAgY291dDw8ICJcbiI7CiAgICAKICAgIHBzMiA9IHBzOwogICAgcHMyLk5oYW5QUyhwczEpOyAgIAogICAgcHMyLkluUGhhblNvKCk7CiAgICBjb3V0PDwgIlxuIjsKICAgIAogICAgcHMyID0gcHM7CiAgICBwczIuQ2hpYVBTKHBzMSk7ICAgCiAgICBwczIuSW5QaGFuU28oKTsKICAgIGNvdXQ8PCAiXG4iOwogICAgCiAgICByZXR1cm4gMDsKfQ==