Nie wiem w jakim celu ta konwersja do string. Jedyne usprawiedliwienie to potencjalne zachowanie zera wiodącego (które było ostatnie). Ale pytanie było jasne o cyfry w liczbie:
#include <iostream>
unsigned revValue(unsigned value) {
unsigned base = 10;
unsigned result = 0;
while(value != 0) {
result = result * base + value % base;
value /= base;
}
return result;
}
unsigned revValueRec(unsigned value, unsigned v = 0) {
return value != 0 ? revValueRec(value / 10, v * 10 + value % 10) : v;
}
int main() {
unsigned value = 912913;
std::cout << revValue(value) << '\n';
std::cout << revValueRec(value) << '\n';
}
BTW: Oczywiście sprawdzanie warunku value != 0 wydaje się trochę zachowawcze ale niech już będzie "edukacyjnie".