#include using namespace std; // Problem 7. Reverse Integer // Medium // Given a signed 32-bit integer x, return x with its digits // reversed. If reversing x causes the value to go outside the signed // 32-bit integer range [-2^31, 2^31 - 1], then return 0. // Assume the environment does not allow you to store 64-bit integers // (signed or unsigned). class Solution { public: int reverse(int x) { deque dq; if (x == 0) return 0; function getDigits = [&dq, &getDigits](int x) -> int { if ((x > 0 && x < 10) || (x < 0 && x > -10)) { dq.push_back(x); return x; } int rem = x%10; dq.push_back(rem); x /= 10; return getDigits(x); }; getDigits(x); cout << "deque: "; for (auto i: dq) {cout << i << " ";} cout << endl; int result = 0; for (size_t i = dq.size(); i > 0; i--) { cout << "pow: " << fixed<< pow(10, i - 1) * dq.front() << endl; if (result + pow(10, i - 1) * dq.front() > INT_MAX || result + pow(10, i - 1) * dq.front() < INT_MIN) return 0; result += pow(10, i - 1) * dq.front(); dq.pop_front(); } return result; } }; int main() { Solution s; vector> testCases = { // {123,321}, // {-123,-321}, // {120,21}, // {1534236469,0}, //{-2147483648,0}, {0,0}, {1563847412,0}, }; for (auto& test: testCases) { cout << setw(10) << "input: " << get<0>(test) << endl; int result = s.reverse(get<0>(test)); cout << setw(10) << "result: " << result << endl; cout << setw(10) << "expected: " << get<1>(test) << endl; cout << "----------------" << endl; } }