Advertisement
nguyenhung1903

CongPhanSo-Class

Sep 11th, 2021
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.97 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <string>
  4. #include <vector>
  5. #include <algorithm>
  6. #include <iomanip>
  7. #include <map>
  8. #include <unordered_set>
  9. using namespace std;
  10.  
  11. long long UCLN(long long a, long long b){
  12.     if(b==0){
  13.         return a;
  14.     } else {
  15.         return UCLN(b,a%b);
  16.     }
  17. }
  18. long long BCNN(long long a, long long b){
  19.     return (a*b/UCLN(a,b) );
  20. }
  21.  
  22. class PhanSo{
  23. private:
  24.     int tuSo;
  25.     int mauSo;
  26. public:
  27.     PhanSo();
  28.     PhanSo(int t, int m);
  29.     PhanSo(int t);
  30.     void set(int, int);
  31.     PhanSo rutgon();
  32.     void chuanhoa();
  33.     friend PhanSo operator+(PhanSo a, PhanSo b);
  34.     friend ostream& operator << (ostream &os, PhanSo a);
  35.     friend istream& operator >> (istream &is, PhanSo &a);
  36. };
  37.  
  38. void PhanSo::set(int a, int b)
  39. {
  40.     this->tuSo = a;
  41.     this->mauSo = b;
  42. }
  43.  
  44. PhanSo PhanSo::rutgon()
  45. {
  46.     int z = UCLN(tuSo, mauSo);
  47.     return PhanSo(tuSo / z, mauSo / z);
  48. }
  49.  
  50. void PhanSo::chuanhoa()
  51. {
  52.     this->rutgon();
  53.     if (this->tuSo < 0 && this->mauSo < 0)
  54.     {
  55.         this->tuSo = abs(this->tuSo);
  56.         this->mauSo = abs(this->mauSo);
  57.     }
  58.     else
  59.         if (this->mauSo < 0)
  60.         {
  61.             this->tuSo =  -abs(this->tuSo);
  62.             this->mauSo = abs(this->mauSo);
  63.         }    
  64. }
  65.  
  66. PhanSo::PhanSo(){tuSo = 0; mauSo = 1;}
  67. PhanSo::PhanSo(int t, int m) {set(t, m);}
  68. PhanSo::PhanSo(int t){set(t, 1);}
  69.  
  70. PhanSo operator+(PhanSo a, PhanSo b)
  71. {
  72.     a = a.rutgon();
  73.     b = b.rutgon();
  74.     PhanSo res(a.tuSo*b.mauSo + a.mauSo*b.tuSo, a.mauSo*b.mauSo);
  75.     res = res.rutgon();
  76.     return res;
  77. }
  78.  
  79. ostream& operator << (ostream &os, PhanSo a)
  80. {
  81.     a.chuanhoa();
  82.     if (a.mauSo == 1)
  83.         os << a.tuSo << endl;
  84.     else
  85.         os << a.tuSo << "/" << a.mauSo << "\n";
  86.     return os;
  87. }
  88.  
  89. istream& operator >> (istream &is, PhanSo &a)
  90. {
  91.     is >> a.tuSo >> a.mauSo;
  92.     return is;
  93. }
  94.  
  95. int main() {
  96.     PhanSo p(1,1), q(1,1);
  97.     cin >> p >> q;
  98.     cout << p + q;
  99.     return 0;
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement