¿Cuántos 1 hay en la representación numérica binaria de un entero?

¿Cuántos 1 hay en la representación numérica binaria de un entero?

Descripción del Título

Dado un entero de 32 bits n, devuelve el número 1 en forma binaria del entero.

Ingrese una descripción:

Ingrese un número entero, que represente n, donde n es 32 como un número entero.

Descripción de salida:

Genera un número entero, que representa el número de unos en la expresión binaria de n.

Ejemplo 1
entrar
1
Salida
1
Ejemplo 2
entrar
-2
Salida
31
Observaciones:

Complejidad temporal O (1) O (1)O ( 1 ) , complejidad adicional del espacioO (1) O (1)O ( 1 )


responder:

Si la enumeración se realiza bit a bit, se requiere una enumeración de 32 bits, que es ligeramente ineficaz. Solo podemos considerar el bit de 1, y hay dos formas de obtener el bit del 1 más a la derecha en binario:

  • n & (n - 1)
  • n & (~ n + 1)

Ambos métodos pueden obtener el bit 1 más a la derecha en la representación binaria de n, luego eliminar este 1 y continuar procesando el resto hasta que se procesen todos los 1.

Código:
#include <cstdio>

using namespace std;

int main(void) {
    
    
    int n;
    scanf("%d", &n);
    int num = 0;
    while (n) {
    
    
        ++num;
        //n &= (n - 1);
        n -= n & (~n + 1);
    }
    return 0 * printf("%d\n", num);
}

Supongo que te gusta

Origin blog.csdn.net/MIC10086/article/details/109114804
Recomendado
Clasificación