Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Množenje velikih brojeva

[es] :: C/C++ programiranje :: Množenje velikih brojeva

[ Pregleda: 1610 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

BlackSnake
Zenica, BA

Član broj: 11245
Poruke: 219
*.telecom.ba.



Profil

icon Množenje velikih brojeva01.04.2004. u 09:00 - pre 220 meseci
Zdravo,
Ima li neko ideju kako, što jednostavnije, napisati program koji će pomnožiti recimo dva cjelobrojna 100-cifrena broja. Naravno ako upotrebim standardni recimo long int doći će do preljevanja.
Znam da se brojevi moraju predstaviti kao stringovi, ali zaista ne mogu da dokučim način kako da to provedem u djelo.
Nailazio sam na neke veoma dugačke source koje ne mogu razumjeti.

Hvala
When you think everithing happens to you is so bad ....
remember that always could be even worse.
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: Množenje velikih brojeva01.04.2004. u 09:23 - pre 220 meseci
Kod za tako nesto, zbog same problematike koja je malo kompleksnija, ne moze biti jednostavan i malen.
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

BlackSnake
Zenica, BA

Član broj: 11245
Poruke: 219
*.telecom.ba.



Profil

icon Re: Množenje velikih brojeva01.04.2004. u 10:23 - pre 220 meseci
Ok, evo kod koji sam našao u C-u (mene zanima u C++):

Code:

#include <stdio.h>
#include <stdlib.h>

int n1 [105], n2 [105], ans [210];

void
mult (void);

int
main (void)
{
    char s [300];
    int i, j, f;

    while (fgets (s, 300, stdin)) {
        for (i = 0 ; i < 105; i++) {
            n1 [i] = n2 [i] = ans [i] = 0;
            ans [2 * i] = 0;
            ans [2 * i + 1] = 0;
        }

    
        j = 104;

        for (i = strlen (s) - 2; i >= 0; i--) {
            n1 [j--] = s [i] - '0';
        }

/*printf ("%d%d%d\n", n1 [102], n1 [103], n1 [104]);
*/

        fgets (s, 300, stdin);
        j = 104;

        for (i = strlen (s) - 2; i >= 0; i--) {
            n2 [j--] = s [i] - '0';
        }

/*printf ("%d%d%d\n", n2 [102], n2 [103], n2 [104]);
*/

        mult ();
        f = 0;

        for (i = 0; i <= 209; i++) {
            if (!f && ans [i] != 0)
                f = 1;

            if (f)
                printf ("%d", ans [i]);
        }

        printf ("\n");

    }

    return 0;    
}

void
mult (void)
{
    int i, j, start, k, c;
    int o, d;

    start = 209;

    for (i = 104; i >= 0; i--) {
        k = start;

        for (j = 104; j >= 0; j--) {
            ans [k--] += (n1 [i] * n2 [j]);
        }

        start--;
    }

    c = 0;

    for (i = 209; i >= 0; i--) {
        o = (ans [i] + c) % 10;
        d = (ans [i] + c) / 10;

        ans [i] = o;
        c = d;
    }
}


Koliko vidim iz f-je mult uzimaju se zadnje cifre iz oba broja pa se one množe pa sve ide unazad. Takođe vidim da se manipuliše ostatkom dijeljenja koje se prikazuje kao konačni rezultat (čini mi se).
Nije mi baš jasno šta se dešava u f-ji main.
Ukoliko ovo ne može biti sažetije, pa samim tim i lakše za shvatiti onda bi mi svako pojašnjenje ovog sourcea dobro došlo.
Hvala.

When you think everithing happens to you is so bad ....
remember that always could be even worse.
 
Odgovor na temu

BlackSnake
Zenica, BA

Član broj: 11245
Poruke: 219
*.as54ze.bih.net.ba.



Profil

icon Re: Množenje velikih brojeva03.04.2004. u 20:57 - pre 220 meseci

Code:

fgets (s, 300, stdin);


Takođe, obzirom da je ova gore naredba u C-u, šta je ekvivalentno istoj u C++.

Hvala
When you think everithing happens to you is so bad ....
remember that always could be even worse.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Množenje velikih brojeva

[ Pregleda: 1610 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.