Длинная Арифметика. Сложение - Free Pascal (452)

Узнай цену своей работы

Формулировка задачи:

Считываем в строку a и b, 2 числа, соответственно. Нам нужно посчитать сумму этих двух чисел.

Диапазон

0 ≤ a, b ≤ 10^10000

Решение задачи: «Длинная Арифметика. Сложение»

textual
Листинг программы
{ Процедура распечатки сверхбольшого числа} 
procedure WriteBigNumber(var F: text; const aNum: TBigNumber); 
var i : integer; 
begin 
i:=CSize; 
while (i>0) and not (aNum[i] in ['1'..'9']) do Dec(i); 
if i=0 then Write(F, '0'); 
while i>0 do begin 
Write(F, aNum[i]); 
Dec(i); 
end; 
Writeln(F); Writeln(F); 
end; 
{ Процедура сложения сверхбольших чисел в столбик. 
Результат помещается в первое число, что равносильно оператору сложения
aNum1 := aNum1 + aNum2 } 
procedure AddNumbers(var aNum1, aNum2 : TBigNumber); 
var  i,j : integer; 
n1, n2 : integer;  { слагаемые цифры} 
sum, ovr : integer;  { сумма и перенос}  
begin 
ovr:=0; { в начале переполнение= 0 } 
{ цикл по всем цифрам, кроме последней} 
for i:=1 to CSize-1do begin 
j:=i;  { j используется после завершения цикла} 
{ Если в текущей позиции пробел, то считаем его нулем, 
а иначе символ цифры преобразуем в цифру 0..9 } 
if aNum1[i]=' ' 
then n1:=0 
else n1:=Ord(aNum1[i])-Ord('0'); { n1 = 0..9 } 
if aNum2[i]=' ' 
then n2:=0 
else n2:=Ord(aNum2[i])-Ord('0'); { n2 = 0..9 } 
sum:= (n1+n2+ovr) mod 10; { сумма sum = 0..9 } 
ovr:= (n1+n2+ovr) div 10; { перенос ovr = 0 или 1 } 
{ Преобразуем цифру в символ цифры} 
aNum1[i]:= Char(sum + Ord('0')); 
end; 
{ Если было переполнение, то за последней цифрой помещаем единицу} 
if ovr<>0 then aNum1[j+1]:='1'; 
end;

Объяснение кода листинга программы

  1. В первой процедуре выводится на экран длинное число.
  2. Цикл выводит все цифры числа, кроме последней.
  3. Если в текущей позиции пробел, то считываем его как ноль.
  4. Получаем значение цифры, преобразуя символ в число от 0 до 9.
  5. Во второй процедуре происходит сложение двух длинных чисел.
  6. Цикл проходит по всем цифрам, кроме последней.
  7. Если в текущей позиции пробел, то считываем его как ноль.
  8. Получаем значение цифры, преобразуя символ в число от 0 до 9.
  9. Вычисляем сумму трех чисел: текущих цифр, переноса и суммы.
  10. Получаем перенос, деля сумму трех чисел на 10.
  11. Преобразуем сумму в символ цифры, добавляя ноль.
  12. Если было переполнение, то добавляем единицу за последней цифрой.
  13. Цикл завершается, когда все цифры сложены.
  14. Переполнение проверяется после цикла.
  15. Если переполнение не равно нулю, то добавляем единицу за последней цифрой.
  16. Результат сложения двух длинных чисел помещается в первое число.
  17. Результат сложения равен оператору сложения.
  18. Вторая процедура завершается, и результат выводится на экран.
  19. Выводится ноль, так как это первая цифра результата.
  20. Выводится результат сложения, который является первым числом.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.214 из 5
Похожие ответы