Informatică, întrebare adresată de elenacansys, 8 ani în urmă

Realizați un algoritm C++ care determină dacă un număr natural n este un număr putere a lui 2.
Exemple:
Date de intrare - - - - - - Date de ieșire
n=1024 - - - - —--------------- Da
n=8 - - - - - - - - - - - - - - - - - Da
n=31 - - - - - - - - - - - - - - - - -Nu​

Anexe:

Răspunsuri la întrebare

Răspuns de gugleadennis88
1

Răspuns:

#include <iostream>

#include <cmath>

using namespace std;

int main()

{

   int n, a, b;

   cin>>n;

   if (ceil(log2(n))==(float)log2(n)) cout<<"Da"; else cout<<"Nu";

   

   return 0;

}

Explicație:

Teoria: introucem un numar. Daca log in baza 2 din n, rotunjit (ceil) va fi egal cu log in baza 2 din n, atunci se afiseaza da, daca nu se afiseaza nu.

Ex: (1)

n=8;

log2(8)=3; ceil(log2(8))=3, se afiseaza da

Ex: (2)

n=9;

log2 (9)= 3.169......; ceil (log2(9))=4                ceil- rotunjirea la cel mai mare numar intreg;

Pentru folosirea logaritmelor si a rotunjirii este nevoie de biblioteca <cmath> sau <math.h>

Daca ceva neclar ma intrebi


gugleadennis88: Sunt si alte metode, exemplu sa imparti numarul n mereu la 2, si daca la sfarsit va ajunge la 1, atunci e da, daca nu atunci e nu
elenacansys: Bună, mulțumesc pentru răspuns, eu am nevoie de metoda cea mai simpla, este pt clasa a 5a, și cred ca cea cu n împărțit mereu la 2 ar fi cea mai ușoară. Dacă poți te rog sa o transpui în C++, ar fi super.
gugleadennis88: ati invatat, instructiunea for, sau macar while ?
elenacansys: Da au învățat, este pt băiatul meu și vreau sa înțeleg eu sa știu sa i explic, deoarece la școală profu nu prea le explică, mulțumesc frumos pentru ajutor
gugleadennis88: #include

using namespace std;

int main()
{
int s, i=1;
cin>>s;
while (i>0){
if (s==1){cout<<"Da"; break;} else
if (s%2==0) s=s/2; else {cout<<"NU"; break;}



}
}
gugleadennis88: nu pot sa reintroduc un raspuns dar aceasta este rezolvarea
gugleadennis88: programul suna asa: daca s va fi egal cu 1 atunci va afisa DA, si va opri instructiunea while daca nu va controla daca este divizbil la 2 si daca nu va fi va afisa nu. Programul va continua asa pana cand s nu va fi egal cu 1 ori sau nu va fi divizibil cu 2
elenacansys: Mulțumesc frumos!
Alte întrebări interesante