Last active
August 29, 2015 14:08
-
-
Save ramntry/f9a8a5d74e5c7708022a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <iostream> | |
| #include <iomanip> | |
| typedef long long integral; | |
| struct num { | |
| integral const z; | |
| integral const s; | |
| num(integral const z, integral const s) : z(z), s(s) {} | |
| num(integral const z) : z(z), s(0) {} | |
| num() : z(0), s(0) {} | |
| num(integral const z, num const b) : z(z), s(b.s) {} | |
| num(num const a, integral const s) : z(a.z), s(s) {} | |
| }; | |
| static inline num operator "" _s(unsigned long long const s) { return num(0, s); } | |
| static inline num operator *(num const a, num const b) { | |
| return num(a.z * b.z - 5 * a.s * b.s, | |
| a.z * b.s + a.s * (b.z + b.s)); | |
| } | |
| static inline num operator +(num const a, num const b) { | |
| return num(a.z + b.z, a.s + b.s); | |
| } | |
| static inline num operator -(num const a, num const b) { | |
| return num(a.z - b.z, a.s - b.s); | |
| } | |
| static inline num operator -(num const a) { | |
| return num(-a.z, -a.s); | |
| } | |
| static inline std::ostream &operator <<(std::ostream &out, num const a) { | |
| if (a.s == 0) { | |
| return out << a.z; | |
| } | |
| if (a.z == 0) { | |
| return out << a.s << 's'; | |
| } | |
| return out << a.z << std::setiosflags(std::ios::showpos) | |
| << a.s << 's' | |
| << std::resetiosflags(std::ios::showpos); | |
| } | |
| static inline num sqr(num const a) { return a * a; } | |
| int main() { | |
| std::cout << (num(2, 3) + num(100_s - 1, 2) * num(3, -1_s)) << std::endl; | |
| std::cout << (2 * -(4 - 5_s) - 7) << std::endl; | |
| std::cout << (sqr(2_s) - 4_s) << std::endl; | |
| std::cout << 0_s << std::endl; | |
| std::cout << 10_s << std::endl; | |
| std::cout << -1_s << std::endl; | |
| std::cout << (5 - 1_s) << std::endl; | |
| return 0; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment