Método uno:
Ideas:. Si un número con 1 para el cálculo se puede encontrar en el número del último dígito es 1, 0 en otro caso
De acuerdo con esta forma de pensar puede tener el siguiente código:
1 #include <iostream> 2 usando espacio de nombres std; 3 4 int main () 5 { 6 7 int n = 0 ; 8 tribunal << " 输入一个数" ; 9 cin >> n; 10 int count = 0 ; 11 , mientras que (n) 12 { 13 14 si (n y 1 ) 15 { 16 recuento ++ ; 17 } 18 es n - >> = 1 ; 19. } 20 es COUT << " número de 1s " << COUNT << endl; 21 es el retorno 0 ; 22 es }
Sin embargo, hay algunos defectos en este método si la entrada es bucle negativo será mueren infinita
Segundo método:
N 1 y la primera operación que ver con determinar el bit más bajo de n no es 1. Entonces el de la izquierda obtuvo 1 2, n, y luego hacer con el cálculo, se puede determinar el tiempo n no es 1 ... baja. Por lo tanto la izquierda repetidamente, cada vez que n puede ser determinado que no es una solución de la 1 número entero binario de ciclos igual al número de bits, un número entero de 32 a 32 ciclos de necesidad
1 #include <iostream> 2 usando espacio de nombres std; 3 4 int main () 5 { 6 7 int n = 0 ; 8 int clave = 1 ; 9 tribunal << " 输入一个数" ; 10 cin >> n; 11 int count = 0 ; 12 , mientras que (tecla) 13 { 14 15 si (n y llave) 16 { 17 contar ++ ; 18 } 19 clave << = 1 ; 20 } 21 cout << " 1的个数为" << recuento << endl; 22 de retorno 0 ; 23 }
método Tres
Ideas: número entero a un signo menos 1, y luego que ver con la aritmética de enteros original, el número entero será el tope derecho un 1 a un 0, entonces la representación binaria de un número entero tiene
el número 1, de cuántas veces se puede realizar tal operación.
1 #include <iostream> 2 usando espacio de nombres std; 3 4 int main () 5 { 6 7 int n = 0 ; 8 tribunal << " 输入一个数" ; 9 cin >> n; 10 int count = 0 ; 11 , mientras que (n) 12 { 13 n = ((n - 1 ) y n); 14 recuento ++ ; 15 16 } 17 tribunal << " 1的个数为" << recuento << endl; 18 }
Final de este artículo.
[Reservado] https://blog.csdn.net/weibo_dm/article/details/80531465