Une solution simple est
1/ de regarder si le nombre est impair si oui le bit de droite
est un 1 donc je le compte
2/je divise par 2 (Attention c'est une division entière! la partie
décimale est tronquée!) ce qui a pour effet de bouger tous
les bits d'un cran vers la gauche et de perdre le bit qui
était le plus a gauche
3/ on recommence en 1/ tant que le nombre est non nul
Exemple en C (j'ai volontairement évite les subtilités du C pour rendre le programme plus lisible)
int x=34;
int compte=0;
do
{
if ((x & 1) ==1)
{
// impair donc je compte
compte = compte +1 ;
}
x=x/2;
}
while(x!=0)
2006-09-11 08:44:41
·
answer #1
·
answered by cd4017 4
·
1⤊
0⤋
L'idée c'est de décomposer ton nombre en puissance de 2, et de compter...
2006-09-11 04:57:01
·
answer #2
·
answered by Izem 3
·
0⤊
0⤋
je suppose que tu as l'algo qui fais la conversion du decimal au binaire,
une fois tu as le nombre en binaire, tu le stocke dans un veteur (tableau), une variable compteur, tu fais le parcours du vecteur et chaque fois tu trouve un 1 du l'incremente(vble compteur)
et voila le tour est joué.
je sais c'est pas tres malin mais efficace.
2006-09-11 04:39:47
·
answer #3
·
answered by tonton 3
·
0⤊
0⤋
Tu peux faire la correspondance :
1 0 0 0 1 0
32 0 0 0 2 0 = 34 !
Il faut marcher avec les puissance de 2
L'algo est le suivant :
somme (nombre de droite à gauche * 2 à la puissance de leur position-1)
e.g. 1*2^(6-1) + 0*2^(5-1) + 0*2^(4-1) + 0*2^(3-1) + 1*2^(2-1) + 0*2^(1-1) = 34
2006-09-11 04:38:50
·
answer #4
·
answered by Anonymous
·
0⤊
0⤋
function nb_un(int i)
int j , k
k = 0
j = i
while (j>1)
k = k + (j mod 2)
j = j div 2
end while
if j = 1 then k = k+1
return k
end function
2006-09-11 04:38:06
·
answer #5
·
answered by Nicolas L 5
·
0⤊
0⤋
Tu programme en quelle langage.
Par exemple, en C, je te proposerai
1) transformer le nombre en chaine (format binaire) avec sprintf
2) lire la chaine et compter le nombre de "1"
2006-09-11 04:37:00
·
answer #6
·
answered by Shaheen 5
·
0⤊
0⤋
T'as pensé à les additionner?
2006-09-11 04:29:13
·
answer #7
·
answered by Big Jim 3
·
0⤊
0⤋