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.