👤

Se citeste un numar natural n Sa se afiseze cele mai mari doua cifre ale lui n. Va rog ajutati-ma! Macar cu un sfat sau o idee! Multumesc mult!

Răspuns :

Răspuns:

#include <iostream>

using namespace std;

int main()

{

   int n, cifra1 = 0, cifra2 = 0;

   cin >> n; // citesc n

   if ( n < 10)

       cout << "Numarul citit are o singura cifra";

   else

       if ( (n < 100) && (n % 10) > (n % 100) )

               cout << "Cea mai mare cifra este " << n % 10 << ". Urmatoarea cea mai mare este " << n % 100;

       else

       {

           cifra1 = n % 10;

           n = n / 10;

           while ( n != 0 )

           {

               if ( n % 10 > cifra1 )

               {

                   cifra2 = cifra1;

                   cifra1 = n % 10;

               }

               else

                   if ( n % 10 > cifra2 )

                       cifra2 = n % 10;

               n = n / 10;

           }

           cout << "Cea mai mare cifra este " << cifra1 << ". Urmatoarea cea mai mare este " << cifra2;

       }

}

Explicație:

Daca nu stii cum functioneaza "/10" sau "%10" *** mod *** si *** div *** uita-te peste acest raspuns: https://brainly.ro/tema/5236863

Prima data citesti numarul n.

Verifici daca are doar o cifra. ---|

                                                    | -----> pentru a afisa mesaj corespunzator

Verifici daca are doua cifre. -----|

Daca numarul citit are minim 3 cifre executi blocul de instructiuni din a doua ramura " else ".

Prima data am ales o variabila cifra1 care imi va memora ultima cifra si va trunchia numarul n eliminand ultima cifra din el. ( cifra1 = n % 10; n = n / 10; )

Pe baza ultimei cifre memorate in variabila anterioara vom executa in interiorul instructiunii while operatii pana cand nu vom mai avea cifre in numarul n. ( while ( n != 0 ) )

Daca ultima cifra din n ( amintim ca n a fost trunchiat odata si ultima sa cifra este alta decat initial citit ) este mai mare decat valoarea variabilei cifra1 atunci inseamna ca am gasit o cifra mai mare decat cea memorata anterior moment in care prin blocul:

if ( n % 10 > cifra1 )

{

    cifra2 = cifra1;

    cifra1 = n % 10;

}

cifra2 va primi valoarea variabilei cifra1, iar cifra1 va avea o cifra mai mare decat cea dinainte.

Daca ultima cifra a numarului n nu este mai mare decat cifra1 verificam daca poate este mai mare decat cifra2, astfel ca:

if ( n % 10 > cifra2 )

     cifra2 = n % 10

va atribui variabilei cifra2 ultima cifra a lui n daca este mai mare decat cifra anterioara a variabilei.

Luam exemplul:

357581

cifra 1 = 1

n = 35758

while ( 35758 != 0 )

{

      if ( 8 > 1 ) -- Adevarat

      {  cifra 2 = 1;

         cifra 1 = 8; }

      n = n / 10 -> n = 3575

}

reiau while deoarece n nu este egal cu 0

while ( 3575 != 0 )

{

        if ( 5 > 8 ) --- Fals

       executam ramura else

       else

               if ( n%10 > cifra2 ) adica if ( 5 > 1 ) --- Adevarat

                   cifra2 = 5

       n = 3575 / 10 = 357

}

while ( 357 != 0 )

{    

            if ( 7 > 8 ) - fals

            else

                   if 7 > 5 ) -- adevarat

                        cifra2 = 7

          n = 357 / 10 = 35

}

while ( 35 != 0 )

{

            if ( 5 > 8 ) --- fals

           else

              if ( 5 > 7 ) --- fals

          nu se executa nimic

           n = 35 / 10 = 3

}

while ( 3 != 0 )

{

          if ( 3 > 8 ) --- fals

          else

               if ( 3 > 7 ) --- fals

          n = 3 / 10 = 0

}

while ( 0 != 0 ) --- fals, nu se mai executa while

paraseste instructiunea while si va afisa:

Cea mai mare cifra este 8. Urmatoarea cea mai mare este 7