Salut! Am urmatoarea problema care trebuie rezolvata in c++ cu while loop.

Cerinta
Se citeste de la tastatura un numar natural N. Calculati numarul minim care se obtine prin eliminarea unei singure cifre din numarul initial.



Date de intrare
Se citeste de la tastatura numarul natural N.



Date de iesire
Se va afisa numarul minim dupa eliminarea unei cifre.



Restrictii si precizari
0 < N < 1,000,000,000


Exemplu
Date de intrare Date de iesire
5912 512


Răspuns :

#include <iostream>

using namespace std;

int main(){

   int n, copie, maxim=0,ap=1;

   //Citim n si ii facem o copie

   cin >> n;

   copie = n;

   //Determinam cifra maxima din numar si numarul de aparitii

   while(n>0){

       //Daca ultima cifra e mai mare decat maxim, atunci ultima cifra devine maxim

       if(n%10>maxim) maxim = n%10;

       //Daca e egala, atunci incrementam numarul de aparitii

       else if(n%10==maxim)ap++;

       //Treci la urmatoarea cifra

       n=n/10;

   }

   //Construim in inv - rasturnatul numarului cautat (copiem toate cifrele, mai putin cifra cu valoarea maxima)

   n = copie;

   int inv=0;

   while(n){

       //Daca cifra e diferita de valoarea maxima adauga la sfarsitul lui inv

       if(n%10 != maxim) inv = inv*10 + n%10;

       //Altfel decrementeaza numarul de aparitii. Daca numarul de aparitii ajunge la 0 nu adauga cifra.

       //Putem sterge o singura aparitie a cifrei. Pentru a garanta ca numarul ce rezulta este cel mai mic trebuie ca aparitia stearsa de noi sa fie cea mai din fata a numarului( procesand numarul de la sfarsit spre inceput, asta inseamna ultima aparitie)

       else{

           ap--;

           if(ap) inv = inv*10 + n%10;

       }

       //Treci la cifra urmatoare

       n=n/10;

   }

   //Construieste inversa lui inv in n (adica numarul cautat de noi)

   while(inv){

       n=n*10+inv%10;

       inv = inv/10;

   }

   //Afiseaza rezultatul

   cout << n;

}