Scusate è la terza volta che vi rompo le scatole, ma sto proprio agli inizi e mi capita spesso di incappare in problemi stupidi XD
Il mio esercizio è:
Scrivere una funzione int ones(int a, int b, int k) che ritorna il numero di interi compresi tra a e b che nella rappresentazione binaria hanno esattamente k uno. Si assuma che b >= a >= 0 e che k >= 0. Ad esempio, se a = 0, b = 7 e k = 2, la funzione ritorna 3; se a = 0, b = 15, k = 3, ritorna 4; se a = 12, b = 67, k = 3, ritorna 19; se a = 12, b = 67, k = 7, ritorna 0.
Il mio codice è:
codice:
#include <stdio.h>
#include <stdlib.h>
int ones (int a, int b, int k);
int main(void) {
int a, b, k;
printf("Inserire a, b, k \n");
scanf ("%d %d %d", &a, &b, &k);
printf ("Il numero di numeri con K uni è: \n %d \n", ones (a,b,k));
}
int ones (int a, int b, int k){
int cnt=0;
int x=a;
int ones=0;
for (; a<=b; a++){
x=a;
while (x!=0){
if (x%2==1) cnt++;
x/=2;
}
if (cnt == k) ones++;
}
return ones;
}
Non funziona però, ad esempio per i valori esempio dell'esercizio 12 67 e 3 mi restituisce 0.
Qualcuno mi può spiegare COSA e PERCHÈ è sbagliato senza darmi il codice corretto ? (vorrei provarci da solo :P)
Grazie mille e scusate l'assillo