Длинная Арифметика. Сложение - 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;
Объяснение кода листинга программы
- В первой процедуре выводится на экран длинное число.
- Цикл выводит все цифры числа, кроме последней.
- Если в текущей позиции пробел, то считываем его как ноль.
- Получаем значение цифры, преобразуя символ в число от 0 до 9.
- Во второй процедуре происходит сложение двух длинных чисел.
- Цикл проходит по всем цифрам, кроме последней.
- Если в текущей позиции пробел, то считываем его как ноль.
- Получаем значение цифры, преобразуя символ в число от 0 до 9.
- Вычисляем сумму трех чисел: текущих цифр, переноса и суммы.
- Получаем перенос, деля сумму трех чисел на 10.
- Преобразуем сумму в символ цифры, добавляя ноль.
- Если было переполнение, то добавляем единицу за последней цифрой.
- Цикл завершается, когда все цифры сложены.
- Переполнение проверяется после цикла.
- Если переполнение не равно нулю, то добавляем единицу за последней цифрой.
- Результат сложения двух длинных чисел помещается в первое число.
- Результат сложения равен оператору сложения.
- Вторая процедура завершается, и результат выводится на экран.
- Выводится ноль, так как это первая цифра результата.
- Выводится результат сложения, который является первым числом.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д