Răspuns :
Nota :
Aceasta NU este cea mai eficienta varianta dar este una dintre cele mai usoare de inteles.
ALGORITM C++ :
#include <iostream>
using namespace std;
int main(){
int n,inv=0,cifmax=0;
cin >> n;
//Retine numarul de zerouri de la finalul numarului
int nrzero = 0;
while (n % 10 == 0) {
n /= 10;
++nrzero;
}
//Construieste rasturnatul, cautand in acelasi timp cifra maxima
while (n) {
if (cifmax < n % 10) {
cifmax = n % 10;
}
inv = inv * 10 + n % 10;
n /= 10;
}
//Reconstruieste numarul,stergand prima aparitie a cifrei maxime
while (inv) {
if (cifmax != inv % 10) {
n = n * 10 + inv % 10;
}
else {
cifmax = -1;
}
inv /= 10;
}
//Adauga inapoi numarul de 0 de la finalul numarului
while (nrzero) {
n *= 10;
--nrzero;
}
cout << n;
}