Cod sursa(job #662956)

Utilizator mariusbuzgariuBuzgariu Marius mariusbuzgariu Data 17 ianuarie 2012 15:03:05
Problema Cifra Scor 90
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.3 kb
PROGRAM INFOARENA_CIFRA;     {OK ==> 100 puncte!}
(*
   Se citesc din fisier T valori pentru numarul N (1<=T<=30000).
   Pentru fiecare valoare data lui N, calculati ultima cifra a sumei:
                 1^1 + 2^2 + 3^3 + ... + N^N,
   unde: 1 <= N < 10^100 (ATENTIE! Numerele trebuie citite ca siruri!).
   Timp maxim de executie pe test: 0.1 secunde;
   Limita de memorie: 65536 Kbytes;
   Dificultate: 1/5;
   Concurs (online): Infoarena
*)
CONST UCS:ARRAY[0..19] OF 0..9 = (0,1,5,2,8,3,9,2,8,7,7,8,4,7,3,8,4,1,5,4);
      {UCS[k]= UC(1^1 + 2^2 + ... + k^k), cu 0<=k<=19.}
VAR T,I,L,N2,CODERR,UC:INTEGER;
    N,U2CIF_N:STRING[100];
    F,G:TEXT;
BEGIN
ASSIGN(F,'cifra.in');
ASSIGN(G,'cifra.out');
RESET(F);
REWRITE(G);
READLN(F,T);
FOR I:=1 TO T DO
    BEGIN
    READLN(F,N);
    L:=LENGTH(N);
    IF (L<=2) THEN U2CIF_N:=N
              ELSE U2CIF_N:=COPY(N,L-1,2);
    VAL(U2CIF_N,N2,CODERR);  {N2= numarul format de ultimele 2 cifre din N.}

    {* Ultima cifra a termenilor sumei se repeta periodic (cu perioada
    principala egala cu 20)!
    ** Ultima cifra a sumei dintr-o perioada (de 20 de termeni) este 4.
    *** Ultima cifra a sumei a 100 de termeni consecutivi este 0.}

    UC:=(4*(N2 DIV 20) + UCS[N2 MOD 20]) MOD 10;
    WRITELN(G,UC);
    END;
CLOSE(F);
CLOSE(G);
END.