Advertisement
Guest User

Untitled

a guest
Jul 27th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.54 KB | None | 0 0
  1. struct frac {
  2.     long long num, den;
  3.  
  4.     frac() : num(0), den(1) { };
  5.     frac(long long num, long long den) { set_val(num, den); }
  6.     frac(long long num) : num(num), den(1) { };
  7.  
  8.     void set_val(long long _num, long long _den) {
  9.         num = _num/__gcd(_num, _den);
  10.         den = _den/__gcd(_num, _den);
  11.         if(den < 0) { num *= -1; den *= -1; }
  12.     }
  13.  
  14.     void operator*=(frac f) { set_val(num * f.num, den * f.den); }
  15.     void operator+=(frac f) { set_val(num * f.den + f.num * den, den * f.den); }
  16.     void operator-=(frac f) { set_val(num * f.den - f.num * den, den * f.den); }
  17.     void operator/=(frac f) { set_val(num * f.den, den * f.num); }
  18. };
  19.  
  20. bool operator<(frac a, frac b) {
  21.     if((a.den < 0) ^ (b.den < 0)) return a.num * b.den > b.num * a.den;
  22.     return a.num * b.den < b.num * a.den;
  23. }
  24.  
  25. std::ostream& operator<<(std::ostream& o, const frac f) {
  26.     o << f.num << "/" << f.den;
  27.     return o;
  28. }
  29.  
  30. bool operator==(frac a, frac b) { return a.num * b.den == b.num * a.den; }
  31. bool operator!=(frac a, frac b) { return !(a == b); }
  32. bool operator<=(frac a, frac b) { return (a == b) || (a < b); }
  33. bool operator>=(frac a, frac b) { return !(a < b); }
  34. bool operator>(frac a, frac b) { return !(a <= b); }
  35. frac operator/(frac a, frac b) { frac ret = a; ret /= b; return ret; }
  36. frac operator*(frac a, frac b) { frac ret = a; ret *= b; return ret; }
  37. frac operator+(frac a, frac b) { frac ret = a; ret += b; return ret; }
  38. frac operator-(frac a, frac b) { frac ret = a; ret -= b; return ret; }
  39. frac operator-(frac f) { return 0 - f; }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement