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![]()

Rispondi quotando
