Facebook
From Beefy Hummingbird, 7 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 300
  1. //
  2. // Created by rafalbyczek on 28.05.16.
  3. //
  4.  
  5. #ifndef ZADANIE_J_DZIWNE_LICZBY_WEIRDNUMBER_H
  6. #define ZADANIE_J_DZIWNE_LICZBY_WEIRDNUMBER_H
  7.  
  8. #include <iostream>
  9.  
  10. using namespace std;
  11.  
  12. class WeirdNumber {
  13. private:
  14.     int a, b, d;
  15.     WeirdNumber *c;
  16. public:
  17.     WeirdNumber(const int a = 0, const int b = 0) : a(a), b(b), c(NULL), d(1) { }
  18.  
  19.     ~WeirdNumber() {
  20.         if (c != NULL) {
  21.             (*c).a += d;
  22.         }
  23.     }
  24.  
  25.     WeirdNumber &operator=(const WeirdNumber &k) {
  26.         if (this != &k) {
  27.             a = k.a;
  28.             b = k.b;
  29.         }
  30.         return *this;
  31.     }
  32.  
  33.     WeirdNumber &operator+(const WeirdNumber &k) {
  34.         return *(new WeirdNumber(a + k.a, b + k.b));
  35.     }
  36.  
  37.     WeirdNumber &operator-(const WeirdNumber &k) {
  38.         return *(new WeirdNumber(a - k.a, b - k.b));
  39.     }
  40.  
  41.     WeirdNumber &operator*(const WeirdNumber &k) {
  42.         return *(new WeirdNumber(a * k.a + 2 * b * k.b, a * k.b + b * k.a));
  43.     }
  44.  
  45.     WeirdNumber &operator+=(const WeirdNumber &k) {
  46.         a += k.a;
  47.         b += k.b;
  48.         return *this;
  49.     }
  50.  
  51.     WeirdNumber &operator-=(const WeirdNumber &k) {
  52.         a -= k.a;
  53.         b -= k.b;
  54.         return *this;
  55.     }
  56.  
  57.     WeirdNumber &operator*=(const WeirdNumber &k) {
  58.         int A = a * k.a + 2 * b * k.b;
  59.         int B = a * k.b + b * k.a;
  60.         a = A;
  61.         b = B;
  62.         return *this;
  63.     }
  64.  
  65.     bool operator==(const WeirdNumber &k) {
  66.         return (a == k.a && b == k.b);
  67.     }
  68.  
  69.     bool operator!=(const WeirdNumber &k) {
  70.         return (a != k.a || b != k.b);
  71.     }
  72.  
  73.     WeirdNumber operator++(int) {
  74.         WeirdNumber C(a, b);
  75.         C.c = this;
  76.         C.d = 1;
  77.         return C;
  78.     }
  79.  
  80.     WeirdNumber &operator++() {
  81.         a++;
  82.         return *this;
  83.     }
  84.  
  85.     WeirdNumber operator--(int) {
  86.         WeirdNumber C(a, b);
  87.         C.c = this;
  88.         C.d = -1;
  89.         return C;
  90.     }
  91.  
  92.     WeirdNumber &operator--() {
  93.         a--;
  94.         return *this;
  95.     }
  96.  
  97.     friend ostream &operator<<(ostream &stream, WeirdNumber const &w) {
  98.         if (w.a != 0)
  99.             stream << w.a;
  100.         if (w.b > 0 && w.b != 1 && w.b != -1) {
  101.             if(w.a != 0) stream << "+";
  102.             stream << w.b << "s";
  103.         }
  104.         if (w.b < 0 && w.b != 1 && w.b != -1)
  105.             stream << w.b << "s";
  106.         if (w.b == 1) {
  107.             if(w.a != 0) {
  108.                 stream << "+s";
  109.             }
  110.             else {
  111.                 stream << "s";
  112.             }
  113.         }
  114.         if (w.b == -1) {
  115.             stream << "-s";
  116.         }
  117.         if (w.a == 0 && w.b == 0) {
  118.             stream << "0";
  119.         }
  120.         return stream;
  121.     }
  122. };
  123.  
  124. #endif //ZADANIE_J_DZIWNE_LICZBY_WEIRDNUMBER_H