Descripción del título
Introduzca un número entero y emita el número de unos en la representación binaria de 32 bits del número. El número negativo está representado por el complemento a uno.
Entrada del ejemplo 1
10
valor de retorno
2
Ideas para resolver problemas:
primero observemos la forma binaria de un conjunto de números:
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
Observamos el entero correspondiente a este binario, y observamos la relación entre el n-ésimo número y el n-1o número, y los dígitos binarios:
por ejemplo , el número binario del número 6, el primer 1 por la derecha y el después de 0, y 5 corresponde a binario y 6 corresponde al número correspondiente al más a la derecha 1 está invertido, y a la derecha, lo mismo es cierto. Es decir, mirando a la primera 1 desde el lado derecho de la binaria de n, el dígito correspondiente del binario de n-1 se obtiene invirtiendo n (por ejemplo, 6- "10, y 5 corresponde a 01).
De esta característica, podemos hacer que n sea AND con n-1, de modo que los dígitos binarios que comienzan desde el primer 1 desde el lado derecho se convertirán en 0, y el resultado será AND con el dígito anterior nuevamente. . . Este bucle hasta el resultado de la fase y es igual a 0. Calcula el número de fases y podrás saber cuántos unos hay en el binario de n;
Código:
public class Solution {
public int NumberOf1(int n) {
int count=0;
while(n!=0){
count++;
n=n&(n-1);
}
return count;
}
}