Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <string>
- #include <vector>
- #include <algorithm>
- #include <iomanip>
- #include <map>
- #include <unordered_set>
- using namespace std;
- long long UCLN(long long a, long long b){
- if(b==0){
- return a;
- } else {
- return UCLN(b,a%b);
- }
- }
- long long BCNN(long long a, long long b){
- return (a*b/UCLN(a,b) );
- }
- class PhanSo{
- private:
- int tuSo;
- int mauSo;
- public:
- PhanSo();
- PhanSo(int t, int m);
- PhanSo(int t);
- void set(int, int);
- PhanSo rutgon();
- void chuanhoa();
- friend PhanSo operator+(PhanSo a, PhanSo b);
- friend ostream& operator << (ostream &os, PhanSo a);
- friend istream& operator >> (istream &is, PhanSo &a);
- };
- void PhanSo::set(int a, int b)
- {
- this->tuSo = a;
- this->mauSo = b;
- }
- PhanSo PhanSo::rutgon()
- {
- int z = UCLN(tuSo, mauSo);
- return PhanSo(tuSo / z, mauSo / z);
- }
- void PhanSo::chuanhoa()
- {
- this->rutgon();
- if (this->tuSo < 0 && this->mauSo < 0)
- {
- this->tuSo = abs(this->tuSo);
- this->mauSo = abs(this->mauSo);
- }
- else
- if (this->mauSo < 0)
- {
- this->tuSo = -abs(this->tuSo);
- this->mauSo = abs(this->mauSo);
- }
- }
- PhanSo::PhanSo(){tuSo = 0; mauSo = 1;}
- PhanSo::PhanSo(int t, int m) {set(t, m);}
- PhanSo::PhanSo(int t){set(t, 1);}
- PhanSo operator+(PhanSo a, PhanSo b)
- {
- a = a.rutgon();
- b = b.rutgon();
- PhanSo res(a.tuSo*b.mauSo + a.mauSo*b.tuSo, a.mauSo*b.mauSo);
- res = res.rutgon();
- return res;
- }
- ostream& operator << (ostream &os, PhanSo a)
- {
- a.chuanhoa();
- if (a.mauSo == 1)
- os << a.tuSo << endl;
- else
- os << a.tuSo << "/" << a.mauSo << "\n";
- return os;
- }
- istream& operator >> (istream &is, PhanSo &a)
- {
- is >> a.tuSo >> a.mauSo;
- return is;
- }
- int main() {
- PhanSo p(1,1), q(1,1);
- cin >> p >> q;
- cout << p + q;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement