Сложить два 50-значных десятичных числа — Pascal(Паскаль)

uses crt;
var s1,s2:string;//числа
    a,b,c:array[byte] of byte;//массивы цифр
    na,nb,i,t,j,n,p:byte;
    k:integer;
begin
clrscr;
write('Vvedite chislo A:');
readln(s1);
write('Vvedite chislo B:');
readln(s2);
na:=length(s1);//длины чисел
nb:=length(s2);
for i:=1 to na do//преобразование в массив цифр
  begin
    val(s1[i],t,k);
    a[i]:=t;
  end;
for i:=1 to nb do
  begin
    val(s2[i],t,k);
    b[i]:=t;
  end;
if na>nb then//если первое длиннее
  begin
    n:=na;
    for i:=1 to na-nb do
      begin
        nb:=nb+1;
        for j:=nb downto 2 do
        b[j]:=b[j-1];
        b[1]:=0;//дополняем второе нолями
      end;
   end
else if nb>na then//то же, если второе длиннее
   begin
     n:=nb;
     for i:=1 to nb-na do
       begin
         na:=na+1;
         for j:=na downto 2 do
         a[j]:=a[j-1];
         a[1]:=0;
       end;
    end
else if nb=na then n:=na;//если равны по длине
p:=0;
for i:=n downto 1 do//сложение столбиком
  begin
   c[i]:=a[i]+b[i]+p;
   if (c[i]>9)and(i>1) then
      begin
       c[i]:=c[i] mod 10;
       p:=1;
      end
    else p:=0;
  end;
if c[1]>9 then//если первое значение больше 9
  begin
    c[1]:=c[1] mod 10;//берем остаток
    n:=n+1;//добавляем ячейку
    for j:=n downto 2 do//сдвигаем массив вправо
    c[j]:=c[j-1];
    c[1]:=1;//пишем в начало 1
  end;
writeln('Chislo C:');
for i:=1 to n do//вывод, если нужно, преобразовать в строку
write(c[i]);
readln
end.

Leave a Comment

61 + = 66