diff options
Diffstat (limited to 'src/main.cpp')
-rw-r--r-- | src/main.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/main.cpp b/src/main.cpp index 5d7858f..143816a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -14,9 +14,42 @@ * Description: Entrypoint */ +#include <cstdint> #include <cstdio> #include <raylib.h> +typedef uint64_t word_t; + +struct Fraction +{ + word_t numerator, denominator; + bool is_simplified; + + Fraction(word_t numerator = 0, word_t denominator = 1, + bool is_simplified = false) + : numerator{numerator}, denominator{denominator}, + is_simplified{is_simplified} + { + } + + void simplify(void) + { + // No-Op if already simplified + if (is_simplified) + return; + word_t a = numerator < denominator ? numerator : denominator, + b = numerator < denominator ? denominator : numerator; + // Euclidean algorithm + for (word_t r = b % a; r != 0; b = a, a = r, r = b % a) + continue; + // a will be the gcd + numerator /= a; + denominator /= a; + // Ensure this is a noop after this + is_simplified = true; + } +}; + int main(void) { puts("Hello, world!"); |