[C] Cosa fa la seguente funzione?

Powervegeta
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
apatriarca
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\).

Powervegeta
Ok, grazie mille :)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.