[RISOLTO]Logaritmo di n in base b

di il
2 risposte

[RISOLTO]Logaritmo di n in base b

Ciao ragazzi, purtroppo ho un altro problema per quanto riguarda il calcolo del logaritmo.
Per definizione: Dati due numeri interi positivi n e b, il logaritmo intero di n in base b è il massimo numero di volte in cui si può moltiplicare b per se stesso ottenendo un risultato non superiore a n.

Il seguente codice che ho scritto non porta ad alcun risultato (non viene proprio emesso l'output, strano vista una printf che comunque dovrebbe emettere qualcosa) e non capisco come mai.
La coppia (921,5), dovrebbe dare come risultato 4, perché 5^4 = 625 che è effettivamente minore di 921, mentre 5^5 = 3125 che è maggiore di 921.
Su queste spiegazioni, cosa c'è di sbagliato nel mio codice?

int n, b, pot = 0, ris, esp, i;
    char prova[] = "(921,5)";
    
    sscanf(prova, "(%d,%d)", &n, &b);
    
    esp = 1;
    while (pot <= n)
    {
        for (i = 1; i <= esp; i++)
            pot = b*b;
        esp++;
    }
    
   printf("Il risultato è: %d \n", esp);
Grazie in anticipo a tutti per l'aiuto!

2 Risposte

  • Re: [RISOLTO]Logaritmo di n in base b

    Non c'è niente di strano: si tratta di un ciclo infinito in quanto pot manterrà sempre il suo valore.
    pot = b*b;
    b non cambia mai all'interno del ciclo e di conseguenza neanche pot
  • Re: [RISOLTO]Logaritmo di n in base b

    candaluar ha scritto:


    Non c'è niente di strano: si tratta di un ciclo infinito in quanto pot manterrà sempre il suo valore.
    pot = b*b;
    b non cambia mai all'interno del ciclo e di conseguenza neanche pot
    Hai ragione. Un altro errore molto banale.
    La soluzione è quindi inizializzare pot a b e andare a moltiplicare ogni volta il risultato su quello già esistente di pot in questo modo:
    pot *= b;
    Grazie mille per l'aiuto!
Devi accedere o registrarti per scrivere nel forum
2 risposte