diff --git a/include/s0007_reverse_integer.hpp b/include/s0007_reverse_integer.hpp new file mode 100644 index 0000000..82f7328 --- /dev/null +++ b/include/s0007_reverse_integer.hpp @@ -0,0 +1,12 @@ +#ifndef S0007_REVERSE_INTEGER +#define S0007_REVERSE_INTEGER + +#include +#include + +class Solution { +public: + int reverse(int x); +}; + +#endif diff --git a/src/s0007_reverse_integer.cpp b/src/s0007_reverse_integer.cpp new file mode 100644 index 0000000..e830cd5 --- /dev/null +++ b/src/s0007_reverse_integer.cpp @@ -0,0 +1,20 @@ +#include "s0007_reverse_integer.hpp" + +int Solution::reverse(int x) { + int r{0}; + std::queue queue; + + while (x != 0) { + queue.push(x % 10); + x = static_cast((x - (x % 10)) / 10); + } + while (!queue.empty()) { + if (r < INT_MIN / 10 || r > INT_MAX / 10) { + return 0; + } + r = r * 10 + queue.front(); + queue.pop(); + } + + return r; +} diff --git a/tests/s0007_reverse_integer.cpp b/tests/s0007_reverse_integer.cpp new file mode 100644 index 0000000..2d9c4e0 --- /dev/null +++ b/tests/s0007_reverse_integer.cpp @@ -0,0 +1,31 @@ +#include "s0007_reverse_integer.hpp" + +#include + +TEST(Problem7, Case1) { + int i = 123; + int o = 321; + Solution solution; + EXPECT_EQ(solution.reverse(i), o); +} + +TEST(Problem7, Case2) { + int i = -123; + int o = -321; + Solution solution; + EXPECT_EQ(solution.reverse(i), o); +} + +TEST(Problem7, Case3) { + int i = 120; + int o = 21; + Solution solution; + EXPECT_EQ(solution.reverse(i), o); +} + +TEST(Problem7, Case4) { + int i = -2147483648; + int o = 0; + Solution solution; + EXPECT_EQ(solution.reverse(i), o); +}