[ Relaja @ 13.11.2005. 22:25 ] @
Treba pronaci zadnju cifru koja se razlikuje od nule u broju koji je jednak faktorijalu unetog broja.Da li je ovaj kod ispravam,ili se mozda mogao drugacije napisati.Nigde ne nailazim na gresku sem kod nekih brojeva (npr. 11600,9645,9956 ...).Evo koda.
npr za unet broj 10 treba da ispise 8:
1*2*3*4*5*6*7*8*9*10 = 3628800;
Unapred hvala ! ! ! Poz.
Code:

program proizvod;
var p:integer;
    n,i : word;
    r :byte;
begin
    readln(n);
    p:=1;
    for i := 1 to n do
       begin
        p:=p*i;
        r:=p mod 10;
        while (r=0)do begin
              p:=p div 10;
              r:=p mod 10;
        end;
        p :=r;
       end;
    if (p<0) then p:=-p;
    writeln(p); 
    readln;
end.
[ Milos D @ 14.11.2005. 14:11 ] @
"Nigde ne nailazim na gresku sem kod nekih brojeva"

!!! Dobra fora

Elem, nikada nisam bio dobar u matematici, ali mislim da ne mozes da pamtis samo poslednju cifru. Na primer

12*15 = 180, a ako "zaboravis" jedinicu 2*15 = 30 pa ne dobijas istu poslednju ne-nula cifru.

Probaj da pamtis onoliko cifara koliko ih ima u mnoziocu, znaci ako je i>9 onda pamti 2 cifre, ako je i>99 pamti tri itd.

[ Relaja @ 14.11.2005. 18:01 ] @
"Nigde ne nailazim na gresku sem kod nekih brojeva"

Lapsus :)

Ok.Vidim u cemu je greska.Treba da diskutujem ukoliko je zadnja cifra nekog brojeva razlicita od nule) 5 ili ne .Hvala na pomoci.
[ Relaja @ 24.11.2005. 13:38 ] @
O mislim da sam to ispravio , ali i dalje ne fukcionise ..

Code:

program proizvod;
var p:int64;
    n,irm,ir,r : int64;
    i:integer;
begin
repeat
    readln(n);
until ((n>=1)and(n<=10000));
    p:=1;
    for i := 1 to n do
       begin

        irm:=i mod 10;
        ir:=i;
        if(irm=0)then
          while (irm=0)do begin
                ir:=ir div 10;
                irm:=ir mod 10;
          end;

          p:=p*ir;
          r:=p mod 10;
        if(r=0)then
          while (r=0)do
          begin
                p:=p div 10;
                r:=p mod 10;
          end;

        if(((p mod 10)<>5)and(i+1<=n)and((i+1)mod 5<>0))then p :=r;
        writeln(p);
      end;
    writeln(p mod 10);

[ Srki_82 @ 24.11.2005. 16:28 ] @
Danas sam dobre volje... 'aj' da se ne patis
Code:
var
  N: Integer;
  I: Integer;
  R: Longint;
begin
  Write('Unesi broj: ');
  ReadLn(N);
  R := 1;
  for I := 2 to N do
  begin
    R := R * I;
    while (R mod 10) = 0 do
      R := R div 10;
    R := R mod 10;
  end;
  WriteLn('Rezultat je: ', R);
  ReadLn;
end.


[Ovu poruku je menjao Srki_82 dana 24.11.2005. u 17:29 GMT+1]
[ Relaja @ 24.11.2005. 18:28 ] @
Ali to je jos gore od onog sto sam ja napisao .Pogledaj gore.Sta ako se mnozi sa brojem koji se zavrsava peticom ?

[Ovu poruku je menjao Relaja dana 24.11.2005. u 19:32 GMT+1]
[ Srki_82 @ 25.11.2005. 09:18 ] @
Kakve veze ima sa kojim se brojem zavrsava broj kojim mnozis?
Hajde daj primer pa da vidimo da li ce program dobro uraditi... mozda stvarno i ima gresku, nisam ga proveravao.

-edit

Upravu si... ovaj program radi dobro samo za jednocifrene brojeve :)
Treba samo uvesti ogranicenje kod brisanja cifara da broj kome se oduzimaju cifre ne sme imati manje cifara od broja sa kojim se mnozi. Sad sam na poslu pa ne mogu da ispravim program... ali znas u cemu je fazon. Potrebno je jos samo to ogranicenje.

[Ovu poruku je menjao Srki_82 dana 25.11.2005. u 10:24 GMT+1]
[ Relaja @ 25.11.2005. 12:57 ] @
Probacu .
U svakom slucaju hvala.Poz.