From 01c0cbb0ec9d01e21fd4c0ae9833c501c761b3a3 Mon Sep 17 00:00:00 2001 From: Pagwin Date: Wed, 11 Dec 2024 15:45:53 -0500 Subject: [PATCH] implemented ostream output op for integer.cpp --- integer.cpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/integer.cpp b/integer.cpp index 7408694..ec7c6f9 100644 --- a/integer.cpp +++ b/integer.cpp @@ -2,6 +2,8 @@ #include #include #include +#include +#include #define todo(msg) \ std::cerr << msg << std::endl; \ assert(false); @@ -115,6 +117,12 @@ public: ret %= rhs; return ret; } + friend Integer operator%(Integer const &lhs, byte rhs) { + if (lhs.size == 0 || lhs.bytes == nullptr) { + return 0; + } + return lhs.bytes[0] % rhs; + } friend Integer operator-(Integer const &val) { Integer ret = val; ret.isNegative = !ret.isNegative; @@ -135,10 +143,24 @@ public: } friend std::ostream &operator<<(std::ostream &lhs, Integer const &rhs) { - Integer discard = rhs; + if (rhs == 0) { + lhs << 0; + return lhs; + } + Integer discard = rhs; + std::stringstream to_output{}; + while (discard != 0) { + to_output << discard % 10; + discard /= 10; + } + std::string out; + to_output >> out; + std::reverse(out.begin(), out.end()); + lhs << out; return lhs; } + explicit operator unsigned long() { unsigned long ret = 0; for (std::size_t i = 0; i < std::min(size, sizeof(unsigned long)); i++) {