👤

Subprogramul pDoi are un singur parametru, n, prin care primește un număr natural (n∈[1,10^9]).
Subprogramul returnează cea mai mare valoare din intervalul [1,n], cu proprietatea că este o putere a
lui 2.
Scrieți definiția completă a subprogramului.
Exemplu: dacă n=20, subprogramul returnează 16.
Rezolvare in C++ cu explicatii ! Multumesc anticipat !


Răspuns :

Răspuns:

int pDoi( int n ) {

   int p2 = 1;

   while ( p2 * 2 <= n )

       p2 *= 2;

   return p2;

}

Explicație:

/// p2 este o putere a lui 2, initial 1 ( cea mai mica putere a lui 2 )

daca am mari puterea si ar deveni mai mare decat n, atunci bucla se opreste

Daca nu, puterea se mareste si bucla se reia

Se returneaza in final puterea

Nu-ti face griji de depasiri, urmatoarea putere dupa 1e9 incape in int