[C] Cosa fa la seguente funzione?
Ciao ragazzi, non riesco a trovare quale siano i risultati che restituiscono le seguenti funzioni:
int g(int a, int b, int c) { int i; for (; c>0; c/=b) if (a == (c%b)) return 1; return 0; } int f(int a, int b) { int n=0; for (; a>0; a /= b) if (!g(a%b, b, a/b)) n++; return n; }
Risposte
La funzione \(g\) verifica se \(a\) è una delle cifre in base \(b\) di \(c\). Dopo \(n\) iterazioni del ciclo avrai infatti che \(c\) sarà diventato uguale a \(c/b^n\) e quindi confronti il resto della divisione \( (c/b^n)/b \) con \(a\). Il resto di quella divisione è uguale alla \(n-\)esima cifra in base \(b\) di \(c\).
La funzione \(f\) divide invece \(a\) per \(b\) ed incrementa \(n\) ogni volta che la cifra corrente di \(a\) non è anche una cifra di \(a/b\). Ovviamente le cifre sono in base \(b\). Stai insomma verificando se \(a\) ha tutte cifre diverse tra di loro in base \(b\).
La funzione \(f\) divide invece \(a\) per \(b\) ed incrementa \(n\) ogni volta che la cifra corrente di \(a\) non è anche una cifra di \(a/b\). Ovviamente le cifre sono in base \(b\). Stai insomma verificando se \(a\) ha tutte cifre diverse tra di loro in base \(b\).
Ok, grazie mille
