Cod sursa(job #308643)

Utilizator kolapsysPostelnicu Dan Marian kolapsys Data 28 aprilie 2009 01:15:26
Problema Cifra Scor 90
Compilator fpc Status done
Runda tot Marime 1.7 kb
{ http://infoarena.ro/problema/cifra }
var f,g:text;
    s:string[100];
    n:int64;
    i,t:integer;
    e:shortint;
    v:array[0..99] of byte;
{ Functie pentru determinarea ultimei cifre a lui n^p }
function putereuc(n,p:int64):int64;
var a:int64;
begin
        if p=0 then putereuc:=1
               else if p=1 then putereuc:=n mod 10
                           else begin
                                a:=putereuc(n,p div 2);
                                a:=a*a mod 10;
                                if odd(p) then a:=a*n mod 10;
                                putereuc:=a;
                                end;
end;
{ ----- Sfarsit functie ----- }
{ Functie pentru determinarea ultimei cifre a sumei S de la i=1 la n din i^i }
function sumauc(n:int64):int64;
var s,i:int64;
begin
    s:=0; i:=1;
    while i<=n do
        begin
        s:=s+putereuc(i mod 10,i);
        i:=i+1;
        end;
    s:=s mod 10;
    sumauc:=s;
end;
{ ----- Sfarsit functie ----- }
begin
        assign(f,'cifra.in'); reset(f);
        assign(g,'cifra.out'); rewrite(g);
        readln(f,t);
        { Se observa ca numerele se repeta din 100 in 100 }
        for i:=0 to 99 do
                v[i]:=sumauc(i);
        { ----- Sfarsit atribuire valori vectorului v de la 0 la 99 ----- }
        { De la valorile mari ne trebuie doar ultimele 2 cifre, asadar le
        citim intr-un string de maxim 100 caractere si selectam ultimele
        2 cifre }
        for i:=1 to t do
                begin
                readln(f,s);
                val(copy(s,length(s)-1,2),n,e);
                writeln(g,v[n]);
                end;
        { ----- Sfarsit ----- }
        close(f); close(g);
end.