program PowerOfLargeNumberProgram;
type
TDigitArray = array of Integer;
function PowerOfLargeNumber(base: Integer; exponent: Integer): TDigitArray;
var
digits: TDigitArray;
i, j, carry, temp: Integer;
begin
SetLength(digits, 1);
digits[0] := 1;
for i := 1 to exponent do
begin
carry := 0;
for j := 0 to High(digits) do
begin
temp := digits[j] * base + carry;
digits[j] := temp mod 10;
carry := temp div 10;
end;
while carry > 0 do
begin
SetLength(digits, Length(digits) + 1);
digits[High(digits)] := carry mod 10;
carry := carry div 10;
end;
end;
PowerOfLargeNumber := digits;
end;
procedure PrintDigits(digits: TDigitArray);
var
i: Integer;
begin
for i := High(digits) downto 0 do
Write(digits[i]);
WriteLn;
end;
var
base, exponent: Integer;
resultDigits: TDigitArray;
begin
base := 2; exponent := 15;
resultDigits := PowerOfLargeNumber(base, exponent);
Write('2^15 = ');
PrintDigits(resultDigits);
exponent := 100;
resultDigits := PowerOfLargeNumber(base, exponent);
Write('2^100 = ');
PrintDigits(resultDigits);
end.
(*
run:
2^15 = 32768
2^100 = 1267650600228229401496703205376
*)