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

mnozenje velikih brojeva

[es] :: Pascal / Delphi / Kylix :: mnozenje velikih brojeva

[ Pregleda: 4579 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

peromalosutra
Ivan Rajkovic
Software engineer
Luxoft
Berlin

Član broj: 54774
Poruke: 873
*.dialup.blic.net.



+148 Profil

icon mnozenje velikih brojeva20.06.2005. u 21:42 - pre 229 meseci
Pokusao sam da napravim program koji treba do pomnozi brojeve sa mnogo cifara (za sada do 1000). Tu sam naisao na 2 problema:
1. Zapis tako velikog broja u datoteci bi trebao biti neki niz byta koji ima clanova koliko i broj cifara. Tu onda nastaje problem oko ucitavanja.
2. Program koji sam ja napisao za sada moze da mnozi samo brojeve koji imaju isti broj cifara.
Evo mog koda:
Code:

program mnozenje;
uses wincrt;
var a,b,p:array[1..2000] of byte;
    i,j:integer;
    buffer:text;

function pomnozi (n:integer):integer;
begin
pomnozi:=a[n]*b[n] mod 10+ a[n]*b[n] div 10;
end;

begin
assign (buffer,'input');
reset (buffer);
i:=0;
while not EOLN (buffer) do
      begin
      inc(i,1);
      read (a[i]);
      end;
readln (buffer);
i:=0;
while not EOLN (buffer) do
      begin
      inc (i,1);
      read (b[i]);
      end;
close (buffer);
for j:=i downto 1 do
    p[j]:=pomnozi (j);
assign (buffer,'output');
rewrite (buffer);
for j:=1 to i do
    write (p[j]);
close (buffer);
end.


Na koji nacin se onda rjesavaju zadaci ovakvog tipa?

 
Odgovor na temu

peromalosutra
Ivan Rajkovic
Software engineer
Luxoft
Berlin

Član broj: 54774
Poruke: 873
*.dialup.blic.net.



+148 Profil

icon Re: mnozenje velikih brojeva20.06.2005. u 21:44 - pre 229 meseci
Sada sam uocio gresku u kodu. Funkcija pomnozi bi trebala da izgleda ovako:
Code:

function pomnozi (n:integer):integer;
begin
pomnozi:=a[n]*b[n] mod 10+ a[n+1]*b[n+1] div 10;
end;


 
Odgovor na temu

cassey
Andreja Ilic
Nis

Član broj: 57788
Poruke: 188
212.200.11.*



+1 Profil

icon Re: mnozenje velikih brojeva21.06.2005. u 00:44 - pre 229 meseci
Pa jednostavno, radis isto kao i kada rucno mnozis brojeve... Evo pogledaj kod koji sam prilozio...

Code:

 procedure Mnozi (a, b: TNiz; var c: TNiz);
  var
         p, i, j, tmp: LongInt;
  begin
    FillChar (c, SizeOf (c), 0);
      c[0] := a[0] + b[0];
    for i := 1  to b[0] do begin
        tmp := 0;
      for j := 1 to a[0] do begin
          p := c[j + i - 1] + a[j] * b[i] + tmp;
        c[j + i - 1] := p MOD 10;
        tmp := p DIV 10;
        if (j = a[0]) then c[i + j] := tmp;
      end;
    end;
   while (c[c[0]] = 0) and (c[0] > 1) do Dec (c[0]);
  end;


Mnoze se brojevi cije su cifre zapamcenje u nizovima a i b, gde a [0] i b [0 ] predstavljaju broj cifara broja a i broja b. Rezultat se smesta u niz c, gde opet c [0] predstavlja broj cifara broja c.
Math is like love. A simple idea but it can get complicated.
 
Odgovor na temu

cassey
Andreja Ilic
Nis

Član broj: 57788
Poruke: 188
212.200.11.*



+1 Profil

icon Re: mnozenje velikih brojeva21.06.2005. u 00:45 - pre 229 meseci
Da, evo (ukoliko ti nesto znaci) i za sabiranje dva broja (ista prezentacija kao i kod mnozenja)

Code:

  procedure Saberi (a, b: TNiz; var c: TNiz);
  var
         p, i, j, tmp: LongInt;
  begin
    FillChar (c, SizeOf (c), 0);
      if a[0] > b[0] then c[0] := a[0] + 1
        else c[0] := b[0] + 1;
      tmp := 0;
    for i := 1  to c[0] do begin
        c[i] := (a[i] + b[i] + tmp) MOD 10;
      tmp :=  (a[i] + b[i] + tmp) DIV 10;
    end;
    while (c[c[0]] = 0) and (c[0] > 1) do Dec (c[0]);
  end;


Math is like love. A simple idea but it can get complicated.
 
Odgovor na temu

bancika
Branislav Stojkovic

Član broj: 24844
Poruke: 631
213.244.197.*

Sajt: www.diy-fever.com


+1 Profil

icon Re: mnozenje velikih brojeva21.06.2005. u 18:25 - pre 229 meseci
zar nije malo neracionalno cuvati jednu cifru u jednom kad mozes dobiti oko 3 cifre svakim bajtom ako broj predstavis binarno, a ne u bcd
Ride the rainbow, crack the sky

DIY gitare, pojacala i efekti www.diy-fever.com
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: mnozenje velikih brojeva

[ Pregleda: 4579 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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