Cześć. Ostatnio w wolnych chwilach rozwiązuje sobie łatwe zadania ze SPOJa i natrafiłem na problem z zadaniem: http://pl.spoj.com/problems/PA05_POT/ - jeżeli wykonam taki kod, to wiadomo rozwiązanie przekroczy czas wykonania:
program pa05_pot;
{$MODE DELPHI}
uses
SysUtils;
function Potega(Podst, Wykl : Integer) : Longint;
var
I, Res : Longint;
begin
Res := 1;
for i := 1 to Wykl do
Res := Res * Podst;
Result := Res;
end;
var
S : string;
P, W, N, X : integer;
begin
Readln(N);
while N > 0 do
begin
Readln(S);
X := Pos(' ', S);
P := StrToInt(Copy(S, 1, X - 1));
W := StrToInt(Copy(S, X + 1, 10));
S := IntToStr(Potega(P, W));
Writeln(Copy(S, Length(S), 1));
N := N - 1;
end;
end.
Dla takiego kodu zaś jak poniżej mam NZEC. Stąd pytanie jak można to rozwiązać. Noga jestem z matmy jak wiecie, ale myślałem że skoro ludzie postują na forach rozwiązania w C++ gdzie używają funkcji Pow, to chyba nic szybszego od takiej funkcji tutaj zastosować nie można. To jak zrobić to zadanie w FPC. Bo to taka durna błahostka wydaje się, a utknąłem niestety. Z góry dziękuję za podpowiedzi.
program pa05_pot;
{$MODE DELPHI}
uses
Math, SysUtils;
function MyPower(P, W : integer) : integer;
begin
Result := Round(Power(P, W));
end;
var
S : string;
P, W, N, X : integer;
begin
Readln(N);
while N > 0 do
begin
Readln(S);
X := Pos(' ', S);
P := StrToInt(Copy(S, 1, X - 1));
W := StrToInt(Copy(S, X + 1, 10));
S := IntToStr(MyPower(P, W));
Writeln(Copy(S, Length(S), 1));
N := N - 1;
end;
end.