Hirdetés

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

  • cucka

    addikt

    válasz Tangerine #1266 üzenetére

    a legkézenfekvőbb, nem túl elegáns viszont újrafelhasználható kódot produkáló elgondolás:

    a számrendszerek közötti átváltáshoz összeadásra és szorzásra van szükség. a szorzás visszavezethető összeadásra és számjeggyel való szorzásra.

    először is: ajánlom, hogy tömb helyett string-ben tárold a hosszú számaidat, ott ugyanis a string[ 0 ] jelöli a hosszát, könnyebben tudsz számolni vele. (ha jól emlékszem, tömbnél nincs ilyen)

    tehát ami kell:
    - függvény ami megszoroz egy számot egy számjeggyel. a szám természetesen string/tömb, ezért számjegyenként kell megszorozni, tárolva azt a számjegyet, amit átviszünk.
    - függvény ami összead két nagy számot - szintén számjegyenként, tárolva a számjegyet amit átviszünk. ügyelni kell arra, hogy ugyanolyan hosszúak legyenek, tehát a rövidebben ki kell egészíteni balról 0 számjegyekkel.
    - függvény ami hozzáilleszt néhány nullát egy nagy számhoz (átírja a string hosszát, 0-kat pakol a végére) - ez a szorzáshoz kell.

    a szorzás pl. valami hasonló lesz (ez nem feltétlenül helyes pascal kód, inkább csak szemléltetés)

    a, b, eredmeny:nagyszam;
    eredmeny:=''0'';
    for pos:=length(b) downto 1 do
    begin
    eredmeny:=osszead(hozzair(szamj_szoroz(a,b[ pos ])),length(b)-pos);
    end;

    pos jelöli, b végétől számítva hanyadik számjegynél tartunk
    vagyis megszorozzuk a-t b aktuális, pos által jelölt számjegyével, az eredményhez jobbról hozzáírunk annyi nullát, ahányadik karakternél tartunk éppen (length(b)-pos) és az egészet hozzáadjuk az eredményhez (ami ugye kezdetben nulla).
    a többi függvény megírása ennél egyszerűbb szerintem, azt rád bízom.

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