Keresés

Új hozzászólás Aktív témák

  • axioma

    veterán

    válasz don_peter #4458 üzenetére

    Ez mar ugye mas, itt muszaj lesz megszamolni a hosszt, en eredetileg csak erre az osszevonasra gondoltam (poz. egesz szambol a megforditottja poz. egesz gyartasa, intbol int):

    int input=...; // segedvaltozo legyen, mert szetbarmoljuk
    int forditva=0;
    while (input != 0) {
    forditva=forditva*10+input%10;
    input=input/10;
    }

    Amit szeretnel, szerintem megkerulheto egy sprintf -fel :) (nyilvan memoriafoglalasra stb. kell akkor meg figyelni).
    De ha matekos megoldast akarsz, akkor logikus megkeresni a legnagyobb helyierteket, es itt is lehet (kovethetobb) szamolni a hosszt:

    hossz=1;
    helyiertek=1;
    while (helyiertek<input) {
    helyiertek*=10;
    hossz++;
    }

    -- de akkor vigyazni kell arra, hogy az input pozitiv egesz (0 sem jo!) legyen (nyilvan itt ez gyors, de nagyon altalaban lehetne logaritmussal is szamolni, hoyg a 10 hanyadik hatvanya ez), es utana akkor erre felepitve mar a ciklusod:

    int szamjegy;
    int osszerakva=0;
    while (helyiertek>0) {
    szamjegy=(input/helyiertek)%10;
    printf("%d,",szamjegy);
    osszerakva=osszerakva*10+szamjegy;
    // vagy: osszerakva=osszerakva+szamjegy*helyiertek;
    helyiertek/=10;
    }

    Igy az inputodat se valtoztatod meg.
    Ilyenre gondoltal? Bocs, a koritest (beolvasas, vegso kiiratas) kihagytam, az algoritmust ez a resz is mutatja.
    (Amugy en java-s vagyok es nem is sokat szolok itt hozza, meg is lepett hogy pont hozzam intezted a kodirasi kerest.)

Új hozzászólás Aktív témák

Hirdetés