Jeśli interesuje Cię wyłącznie "odwrócenie liczby", zbędne są jakiekolwiek konwersje czy stosowanie strumieni a nawet std::string. Wystarczy zauważyć że dostęp do ostatniej cyfry to wynik modulo 10 a dostęp do następnej (od prawej) to modulo 10 z podzielonej liczby przez 10.
Odpowiedź (czyli "odwróconą liczbę"), zbudujesz dodając wynik bieżącego modulo i .... przemnożysz przez 10.
Jeśli jednak chcesz zachować w wyniku odwrócenia wiodące zera (np. odwrócenie 21410 -> 01412 czy 1412?), to nie masz wyjścia. Powinieneś przetwarzać liczbę na napis.
Najpierw próbuj sam... :-)
#include <iostream>
unsigned revValue(unsigned value) {
unsigned answer = value % 10;
while(value /= 10) {
answer *= 10;
answer += value % 10;
}
return answer;
}
int main() {
std::cout << revValue(8923) << std::endl;
std::cout << revValue(21410) << std::endl;
}