[ BlackSnake @ 01.04.2004. 09:00 ] @
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
[ leka @ 01.04.2004. 09:23 ] @
Kod za tako nesto, zbog same problematike koja je malo kompleksnija, ne moze biti jednostavan i malen.
[ BlackSnake @ 01.04.2004. 10:23 ] @
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.
[ BlackSnake @ 03.04.2004. 20:57 ] @

Code:

fgets (s, 300, stdin);


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

Hvala