#include <iostream>
class reverser
{
public:
reverser(int orig) : orig(orig), done(false) {}
int result() const { return done ? res : reverse(); }
private:
int reverse() const
{
res = 0;
int n = orig;
while (n)
{
int last = get_last_digit(n);
add_last_digit(res, last);
remove_last_digit(n);
}
done = true;
return res;
}
static void remove_last_digit(int& n) {
n /= 10;
}
static int get_last_digit(int& n) {
return n % 10;
}
static void add_last_digit(int& n, int digit) {
n = n * 10 + digit;
}
mutable int res;
const int orig;
mutable bool done;
};
int main()
{
int n = 1023456;
reverser* rev = new reverser( n );
std::cout << rev->result() << std::endl;
delete rev;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgcmV2ZXJzZXIKewpwdWJsaWM6CglyZXZlcnNlcihpbnQgb3JpZykgOiBvcmlnKG9yaWcpLCBkb25lKGZhbHNlKSB7fQoJaW50IHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIGRvbmUgPyByZXMgOiByZXZlcnNlKCk7IH0KcHJpdmF0ZToKCWludCByZXZlcnNlKCkgY29uc3QKCXsKCQlyZXMgPSAwOwoJCWludCBuID0gb3JpZzsKCSAgICB3aGlsZSAobikKCSAgICB7CgkgICAgICAgIGludCBsYXN0ID0gZ2V0X2xhc3RfZGlnaXQobik7CgkgICAgICAgIGFkZF9sYXN0X2RpZ2l0KHJlcywgbGFzdCk7CgkgICAgICAgIHJlbW92ZV9sYXN0X2RpZ2l0KG4pOwoJICAgIH0KCSAgICBkb25lID0gdHJ1ZTsKCSAgICByZXR1cm4gcmVzOwoJfQoKCXN0YXRpYyB2b2lkIHJlbW92ZV9sYXN0X2RpZ2l0KGludCYgbikgewoJICAgIG4gLz0gMTA7Cgl9CgkgCglzdGF0aWMgaW50IGdldF9sYXN0X2RpZ2l0KGludCYgbikgewoJICAgIHJldHVybiBuICUgMTA7Cgl9CgkgCglzdGF0aWMgdm9pZCBhZGRfbGFzdF9kaWdpdChpbnQmIG4sIGludCBkaWdpdCkgewoJICAgIG4gPSBuICogMTAgKyBkaWdpdDsKCX0KCgltdXRhYmxlIGludCByZXM7Cgljb25zdCBpbnQgb3JpZzsKCW11dGFibGUgYm9vbCBkb25lOwp9OwoKaW50IG1haW4oKQp7CiAgICBpbnQgbiA9IDEwMjM0NTY7CiAJcmV2ZXJzZXIqIHJldiA9IG5ldyByZXZlcnNlciggbiApOwogCXN0ZDo6Y291dCA8PCByZXYtPnJlc3VsdCgpIDw8IHN0ZDo6ZW5kbDsKIAlkZWxldGUgcmV2Owp9