¿Cómo comprobar si un número es potencia de 2 o no en C ++ (métodos diferentes)?

En este artículo, vamos a aprender t cómo comprobar, si un número dado es potencia de 2 o no mediante el programa C ++? En este caso, estamos utilizando diferentes métodos de 4 a comprobarlo.

Supongamos que si se le da un número N y hay que averiguar si N es potencia de 2 o no.

Hay muchas soluciones a este problema

1) Por simplemente repetidamente buceo N por 2 si N es número par. Si terminan en 1 entonces N es potencia de 2

#include <iostream>
using namespace std;
int main()
{
int n;
cout<<"Enter the number :";
cin>>n;
if(n>0)
{
while(n%2 == 0)
{
n/=2;
}
if(n == 1)
{
cout<<"Number is power of 2"<<endl;
}
}
if(n == 0 || n != 1)
{
cout<<"Number is not power of 2"<<endl;
}
return 0;
}

salida

    First run:
Enter the number :10
Number is not power of 2
Second run:
Enter the number :16
Number is power of 2

2) Al tomar log2 de N y luego pasarlo a piso y ceil si tanto da mismo resultado entonces N es potencia de 2

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n;
cout<<"Enter the number :";
cin>>n;
if(ceil(log2(n))== floor(log2(n)))
{
cout<<"Number is power of 2"<<endl;
}
else
{
cout<<"Number is not power of 2"<<endl;
}
}

salida

    First run:
Enter the number :10
Number is not power of 2
Second run:
Enter the number :16
Number is power of 2

3) mediante el uso de la manipulación de bits

    Suppose N = 8 = (1000)2 
Then N-1 = 7 = (0111)2
N & (N-1)= (1000)2 & (0111)2 = (0000)2
N = 5 = (0101)2
N-1 = 4 = (0100)2
N & (N-1) = (0101)2 & (0100)2 = (0001)2

Si un número es potencia de 2 a continuación, en representación binaria del recuento de 1 será uno.

#include <iostream>
using namespace std;
int main()
{
int n;
cout<<"Enter the number :";
cin>>n;
if(n != 0 && (n & (n-1)) == 0)
{
cout<<"Number is power of 2"<<endl;
}
else
{
cout<<"Number is not power of 2"<<endl;
}
}

salida

    First run:
Enter the number :10
Number is not power of 2
Second run:
Enter the number :16
Number is power of 2

4) Contando el número de 1 de en forma binaria de N . Si el recuento es 1 entonces N es potencia de 2.

#include <iostream>
using namespace std;
int main()
{
int n,count1=0;
cout<<"Enter the number :";
cin>>n;
while(n)
{
n = n & (n-1);
count1++;
}
if(count1 == 1)
{
cout<<"Number is power of 2"<<endl;
}
else
{
cout<<"Number is not power of 2"<<endl;
}
}

salida

    First run:
Enter the number :10
Number is not power of 2
Second run:
Enter the number :16
Number is power of 2

Referencia – Programa para encontrar si un no es potencia de dos


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *