Длинная арифметика. Ввод чисел без фильтра на символы

Для выполнения операций с «длинными» числами их нужно ввести в компьютер. Часто данные считывают как строки. В данном примере число считывается «поцифренно». Ввод числа заканчивается нажатием на Enter или по достижению максимальной длины числа.

 

const Count=10000;
var
  c: char;
  a, b, o: array[1..Count+1] of byte;
  na, nb, i, l, x: longint;
 
begin
  repeat
    read(c);
    if c in ['0'..'9'] then
    begin
      inc(na); 
      a[na] := ord(c) - 48;
    end;
  until (c = #13) or (na = Count);
  {-----------------------------------------------------------------------------------------}
  repeat
    read(c);
    if c in ['0'..'9'] then
    begin
      inc(nb);
      b[nb] := ord(c) - 48;
    end;
  until (c = #13) or (nb = Count);
  if na > nb then l := na
  else l := nb;
  if (na > nb) then l := na else l := nb;
  {==========================================================================================}
  for i := 1 to na div 2 do
  begin
    x := a[i];
    a[i] := a[na - i + 1];
    a[na - i + 1] := x;
  end;
  for i := 1 to nb div 2 do
  begin
    x := b[i];
    b[i] := b[nb - i + 1];
    b[nb - i + 1] := x;
  end;
  {==========================================================================================}
  for i := 1 to l do
  begin
    o[i] := o[i] + a[i] + b[i];
    if (o[i] > 9) then begin o[i + 1] := trunc(o[i] / 10); o[i] := o[i] mod 10; end;
  end;
  if (o[l+1] > 0) then inc(l);
  for i := l downto 1 do write(o[i]); writeln;  
end.

 

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии