Informatică, întrebare adresată de sikesjack1, 8 ani în urmă

Buna!
Imi poate explica cineva cum se reconstruieste numarul n, in aceasta functie?
Nu inteleg de ce impart p cu 10, mai apoi il inmultesc la loc???

int nrmaxim(int n)
{
    int nrc = 0, p = 1, k = n, maxx = n;
    while(k)
    {
        nrc ++;
        p = p * 10;
        k = k / 10;
    }
    p = p / 10;
    while(nrc)
    {
        if(n > maxx) maxx = n;
        n = n % p * 10 + n / p;
        nrc --;
    }
    return maxx;
}
Multumesc!

Răspunsuri la întrebare

Răspuns de CinevaFaraNume
0

Răspuns:

Pentru ca p trebuie sa fie cea mai mare putere a lui 10 mai mica sau egala cu n.

Explicație:

Pentru partea asta:

while(k)

{

    nrc ++;

    p = p * 10;

    k = k / 10;

}

La sfarsitul executiei acestui while, p va avea valoarea:

p = 10^{\lfloor lg \: n\rfloor+1}

(prima putere a lui 10 mai mare decat numarul k)

Daca vrei sa il folosesti pentru a permuta circular cifrele lui n spre stanga, p trebuie sa aiba cea mai mare putere a lui 10 mai mica sau egala cu n(p = 10^{\lfloor lg \: n \rfloor})

Ca sa ajungi de la 10^{\lfloor lg \: n\rfloor+1} la p = 10^{\lfloor lg \: n \rfloor}, trebuie sa imparti la 10

Alte întrebări interesante