//
// Created by rafalbyczek on 28.05.16.
//
#ifndef ZADANIE_J_DZIWNE_LICZBY_WEIRDNUMBER_H
#define ZADANIE_J_DZIWNE_LICZBY_WEIRDNUMBER_H
#include <iostream>
using namespace std;
class WeirdNumber {
private:
int a, b, d;
WeirdNumber *c;
public:
WeirdNumber(const int a = 0, const int b = 0) : a(a), b(b), c(NULL), d(1) { }
~WeirdNumber() {
if (c != NULL) {
(*c).a += d;
}
}
WeirdNumber &operator=(const WeirdNumber &k) {
if (this != &k) {
a = k.a;
b = k.b;
}
return *this;
}
WeirdNumber &operator+(const WeirdNumber &k) {
return *(new WeirdNumber(a + k.a, b + k.b));
}
WeirdNumber &operator-(const WeirdNumber &k) {
return *(new WeirdNumber(a - k.a, b - k.b));
}
WeirdNumber &operator*(const WeirdNumber &k) {
return *(new WeirdNumber(a * k.a + 2 * b * k.b, a * k.b + b * k.a));
}
WeirdNumber &operator+=(const WeirdNumber &k) {
a += k.a;
b += k.b;
return *this;
}
WeirdNumber &operator-=(const WeirdNumber &k) {
a -= k.a;
b -= k.b;
return *this;
}
WeirdNumber &operator*=(const WeirdNumber &k) {
int A = a * k.a + 2 * b * k.b;
int B = a * k.b + b * k.a;
a = A;
b = B;
return *this;
}
bool operator==(const WeirdNumber &k) {
return (a == k.a && b == k.b);
}
bool operator!=(const WeirdNumber &k) {
return (a != k.a || b != k.b);
}
WeirdNumber operator++(int) {
WeirdNumber C(a, b);
C.c = this;
C.d = 1;
return C;
}
WeirdNumber &operator++() {
a++;
return *this;
}
WeirdNumber operator--(int) {
WeirdNumber C(a, b);
C.c = this;
C.d = -1;
return C;
}
WeirdNumber &operator--() {
a--;
return *this;
}
friend ostream &operator<<(ostream &stream, WeirdNumber const &w) {
if (w.a != 0)
stream << w.a;
if (w.b > 0 && w.b != 1 && w.b != -1) {
if(w.a != 0) stream << "+";
stream << w.b << "s";
}
if (w.b < 0 && w.b != 1 && w.b != -1)
stream << w.b << "s";
if (w.b == 1) {
if(w.a != 0) {
stream << "+s";
}
else {
stream << "s";
}
}
if (w.b == -1) {
stream << "-s";
}
if (w.a == 0 && w.b == 0) {
stream << "0";
}
return stream;
}
};
#endif //ZADANIE_J_DZIWNE_LICZBY_WEIRDNUMBER_H
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}