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