1. Сложение "длинных" чисел
function SlozhenieChisel(chislo1, chislo2: string): string;
var i, dlina: integer;
p: array of byte;
begin
dlina:=Length(chislo1);
If Length(chislo2)>dlina then
dlina:=Length(chislo2)+1 else
dlina:=dlina+1;
While Length(chislo1)<dlina do
Insert('0', chislo1, 1);
While Length(chislo2)<dlina do
Insert('0', chislo2, 1);
SetLength(p, dlina);
Result:='';
For i:=0 to dlina-1 do
p[i]:=0;
For i:=dlina downto 2 do
begin
p[i-1]:=p[i-1]+StrToInt(chislo1[i])+StrToInt(chislo2[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 dlina-1 do
Result:=Result+IntToStr(p[i]);
While (Result<>'') and (Result[1]='0') do
Delete(Result, 1, 1);
end;
где
chislo1, chislo2 - исходные числа, записанные в строковом виде.
Например, SlozhenieChisel('6523652323523541369829625622653684654235426354687232536263', '9413983543685263162354967467534953745376453764257642734523') выведет '15937635867208804532184593090188638399611880118944875270786'.
2. Умножение "длинных" чисел
function UmnozhenieChisel(chislo1, chislo2: string): string;
var i1, i2: integer;
s: string;
p: array of byte;
begin
SetLength(p, Length(chislo1)+Length(chislo2));
Result:='';
For i1:=Length(chislo1) downto 1 do
begin
s:='';
For i2:=0 to Length(chislo1)+Length(chislo2)-1 do
p[i2]:=0;
For i2:=Length(chislo2) downto 1 do
begin
p[i1+i2-1]:=p[i1+i2-1]+StrToInt(chislo1[i1])*StrToInt(chislo2[i2]);
If p[i1+i2-1]>=10 then
begin
p[i1+i2-2]:=p[i1+i2-1] div 10;
p[i1+i2-1]:=p[i1+i2-1] mod 10;
end;
end;
For i2:=0 to Length(chislo1)+Length(chislo2)-1 do
s:=s+IntToStr(p[i2]);
While (s<>'') and (s[1]='0') do
Delete(s, 1, 1);
Result:=SlozhenieChisel(Result, s);
end;
end;
где
chislo1, chislo2 - исходные числа, записанные в строковом виде.
Например, UmnozhenieChisel('6523652323523541369829625622653684654235426354687232536263', '9413983543685263162354967467534953745376453764257642734523') выведет '61413555618374748849977845610399844217660687681909351978534411248705150246948702748286484885796873132969976079507549'.
Примечание. Функция UmnozhenieChisel зависит от функции SlozhenieChisel.
|