1. Сложение "длинных" чисел
function NumberAdd(a, b: string): string;
var i, len: integer;
p: array of byte;
begin
if Length(a)>Length(b) then
len:=Length(a)+1 else
len:=Length(b)+1;
while Length(a)<len do
a:='0'+a;
while Length(b)<len do
b:='0'+b;
SetLength(p, len);
Result:='';
for i:=0 to len-1 do
p[i]:=0;
for i:=len downto 2 do
begin
p[i-1]:=p[i-1]+StrToInt(a[i])+StrToInt(b[i]);
if p[i-1]>=10 then
begin
p[i-2]:=p[i-1] div 10;
p[i-1]:=p[i-1] mod 10;
end;
end;
for i:=0 to len-1 do
Result:=Result+IntToStr(p[i]);
while (Result<>'') and (Result[1]='0') do
Delete(Result, 1, 1);
end;
где:
a , b – исходные числа, записанные в строковом виде.
Например,
NumberAdd('6523652323523541369829625622653684654235426354687232536263',
'9413983543685263162354967467534953745376453764257642734523') выведет
'15937635867208804532184593090188638399611880118944875270786';
NumberAdd('34215409462860781092',
'833043077814022310693589842664') выведет
'833043077848237720156450623756'.
2. Умножение "длинных" чисел
function NumberMul(a, b: string): string;
var i, j: integer;
s: string;
p: array of byte;
begin
SetLength(p, Length(a)+Length(b));
Result:='';
for i:=Length(a) downto 1 do
begin
s:='';
for j:=0 to Length(a)+Length(b)-1 do
p[j]:=0;
for j:=Length(b) downto 1 do
begin
p[i+j-1]:=p[i+j-1]+StrToInt(a[i])*StrToInt(b[j]);
if p[i+j-1]>=10 then
begin
p[i+j-2]:=p[i+j-1] div 10;
p[i+j-1]:=p[i+j-1] mod 10;
end;
end;
for j:=0 to Length(a)+Length(b)-1 do
s:=s+IntToStr(p[j]);
while (s<>'') and (s[1]='0') do
Delete(s, 1, 1);
Result:=NumberAdd(Result, s);
end;
end;
где:
a , b – исходные числа, записанные в строковом виде.
Например,
NumberMul('6523652323523541369829625622653684654235426354687232536263',
'9413983543685263162354967467534953745376453764257642734523') выведет
'61413555618374748849977845610399844217660687681909351978534411248705150246948702748286484885796873132969976079507549';
NumberMul('990918900803979',
'5885894591255388092880215') выведет
'5832444198614874435652876143089242375485'.
Примечание. Функция NumberMul зависит
от функции NumberAdd .
|