Estuve jugando un poco con esto de los números GRANDES, y he llegado hasta aquí. En ningún caso los algoritmos están optimizados, pero si no los quieres para nada muy serio te pueden servir.
Código Delphi
[-]
type
TSuperLargo = array[0..15] of Byte;
function AddSuper(var a,b: TSuperLargo; Acarreo: Integer): TSuperLargo; overload;
var
i,j: integer;
begin
for i := 0 to 15 do
begin
j:= (Integer(a[i]) + Integer(b[i])) + Acarreo;
Result[i]:= j mod 256;
Acarreo:= j div 256;
end;
end;
function AddSuper(a,b: TSuperLargo): TSuperLargo; overload;
begin
Result:= AddSuper(a,b,0);
end;
function SubSuper(a,b: TSuperLargo): TSuperLargo;
var
i: integer;
begin
for i := 0 to 15 do
b[i]:= b[i] xor $FF;
Result:= AddSuper(a,b,1);
end;
function MulSuper(a: TSuperLargo; b: Byte): TSuperLargo; overload;
var
i,j: integer;
Acarreo: Integer;
begin
Acarreo:= 0;
for i := 0 to 15 do
begin
j:= (Integer(a[i]) * Integer(b)) + Acarreo;
Result[i]:= j mod 256;
Acarreo:= j div 256;
end;
end;
function ShiftLSuper(a: TSuperLargo): TSuperLargo;
var
i: integer;
begin
Result[0]:= 0;
for i:= 0 to 14 do
Result[i+1]:= a[i];
end;
function ShiftRSuper(a: TSuperLargo): TSuperLargo;
var
i: integer;
begin
Result[15]:= 0;
for i:= 1 to 15 do
Result[i-1]:= a[i];
end;
function MulSuper(a,b: TSuperLargo): TSuperLargo; overload;
var
i: integer;
begin
FillChar(Result,Sizeof(Result),0);
for i:= 15 downto 0 do
begin
Result:= ShiftLSuper(Result);
Result:= AddSuper(Result,MulSuper(a,b[i]));
end;
end;
function int64ToSuper(a,b: int64): TSuperLargo;
var
i: integer;
begin
for i:= 0 to 7 do
begin
Result[i]:= Byte((a shr (8*i)) and $FF);
Result[i+8]:= Byte((b shr (8*i)) and $FF);
end;
end;
procedure SuperToInt64(S: TSuperLargo; var a: int64; var b: int64);
var
i: integer;
begin
for i:= 7 downto 0 do
begin
a:= (a shl 8) + S[i];
b:= (b shl 8) + S[i+8];
end;
end;
Con esto puedes hacer operaciones simples: suma, resta, multiplicación, desplazamientos, la división se me antojaba muy complicada
Código Delphi
[-]
var
a,b: TSuperLargo;
x,y: int64;
begin
a:= int64ToSuper(1000,0);
b:= int64ToSuper($2222,$5533);
b:= AddSuper(a,b);
SuperToInt64(b,x,y);
end;
En fin, si quieres realizar algo un poco serio, encontraras librerías en Internet para manejar números grandes, pero para algo sencillo esto te puede servir.