¿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);
}