// ratio.cc -- Rationale Zahlen
#include <stdio.h>
#include <iostream>
#include <iomanip>
using namespace std;

typedef long long Int;

Int ggt(Int a, Int b) {
  a = (a<0) ? -a : a;
  b = (b<0) ? -b : b;
  while (b) { Int c = a % b; a = b; b = c; }
  return a;
}
class ratio {
  Int z; Int n;
  void norm();   // private Element-Funktion, normalisiert durch Kuerzen.
public:
  ratio(Int zz = 0, Int nn = 1) { z = zz; n = nn; norm(); };
  friend ratio operator+(ratio, ratio);
  friend ratio operator-(ratio, ratio);
  friend ratio operator*(ratio, ratio);
  friend ratio operator/(ratio a, ratio b) { return a*b.inv(); }
  friend ostream& operator<<(ostream& , ratio);
  friend istream& operator>>(istream& , ratio&);
  // Unaere Operatoren:
  ratio operator++()    { z += n; return *this; }           // Prefix
  ratio operator++(int) { ratio r = *this; z += n; return r;} // Postfix
  ratio operator+=(ratio r) { z = z*r.n + r.z*n, n = n*r.n; norm();
                              return *this; }
  // Member-Funktionen:
  ratio inv() { return ratio(n,z); }
  operator double() { return (double)z/(double)n; }  // cast auf double
};
ratio operator+(ratio a, ratio b) {
  return ratio( a.z*b.n + b.z*a.n , a.n*b.n );
}
ratio operator-(ratio a, ratio b) {
  return ratio( a.z*b.n - b.z*a.n , a.n*b.n );
}
ratio operator*(ratio a, ratio b) {
  Int d,zz,nn;
  if (a.z == 0 || b.z == 0) return ratio(0,1);
  if (a.n == 0 || b.n == 0) return ratio(1,0);
  // "kreuzweise" kuerzen:
  if ( (d=ggt(a.z, b.n)) != 1) { a.z /= d; b.n /= d; }
  if ( (d=ggt(a.n, b.z)) != 1) { a.n /= d; b.z /= d; }
  return ratio( a.z*b.z, a.n*b.n );
}
inline void ratio::norm() {
  Int d;
  if (n) {
    if ( n < 0 ) { n = -n; z = -z;  }
    if ( (d = ggt(z,n)) != 1) { z /= d; n /= d; }
  }
  else  z = 1;                           // Infty: Nenner = 0
}
ostream& operator<<(ostream& os, ratio a) {
  return os << a.z << '/' << a.n;
}
istream& operator>>(istream& is,ratio& a) {
  is >> a.z >> a.n; a.norm();
  return is;
}
int main() {
  ratio r, s, t;
  cout << "z n : "; cin >> r;
  cout << " r : " << r << "\n";
  cout << (double)r << endl;
  t = ++r;
  cout << t << '\n';
  cout << t++ << '\n';
  cout << t << '\n';
  cout << ++t << '\n';
  cout << "z n : "; cin >> s;
  cout << " s : " << s << "\n";
  cout << "Summe: \t" << r+s << '\n';
  cout << "Diff:  \t" << r-s << '\n';
  cout << "Prod:  \t" << r*s << '\n';
  cout << "Quot:  \t" << r/s << '\n';
  cout << r << " dividiert durch " << s << " = " << r/s << '\n';
  r += s;
  cout << "r += s = " << r << '\n';
  r += (Int)17;
  cout << "r += 17 = " << r << '\n';
  while (1) {
    ratio a = ratio(1,1);
    Int i,n;
    cout << "n : "; cin >> n;
    for (i=2; i<=n; i++) {
      a += ratio(1,i);
    }
    cout << "1 + 1/2 + ... + 1/" << n << " = " << a << '\n';
  }
}
