Сложение длинных целых чисел используя двусвязные списки - PascalABC.NET
Формулировка задачи:
как реализовать программу сложения длинных целых чисел используя двусвязные списки?
Решение задачи: «Сложение длинных целых чисел используя двусвязные списки»
textual
Листинг программы
Type cif = 0..9; mas = ^tmas; tmas = Record a : Cif; p,n : mas; End; Var a,a1,a2 : mas; Procedure DisposeMT(var mm : mas); Var mt : mas; Begin If mm<>nil then Repeat mt:=mm; mm:=mm^.n; Dispose(mt); Until mm=nil; End; Procedure GetLongNumSt(S : String; var m : mas); Var i : Integer; mt : mas; Begin m:=nil; For i:=1 to Length(S) do Begin New(mt); mt^.a:=Ord(S[i])-Ord('0'); mt^.p:=nil; mt^.n:=m; If m<>nil then m^.p:=mt; m:=mt; End; End; Procedure GetLongNumInt(SL : Longint; var m : mas); Var L : Longint; mt : mas; Begin L:=SL; m:=nil; While L>0 do Begin New(mt); mt^.a:=L mod 10; mt^.n:=nil; mt^.p:=m; If m<>nil then m^.n:=mt; m:=mt; L:=L div 10; End; While m^.p<>nil do m:=m^.p; End; Procedure LongNumInSt(m : mas; var S : String); Var mt : mas; Begin S:=''; mt:=m; While mt<>nil do Begin S:=Chr(mt^.a+Ord('0'))+S; mt:=mt^.n; End; End; Procedure ShowLongNum(m : mas); Var St : String; Begin LongNumInSt(m,St); Writeln(St); End; Procedure LongSum(m1,m2 : mas; var m : mas); Var k,n1,n2 : Byte; mt,m01,m02 : mas; Begin k:=0; m01:=m1; m02:=m2; m:=nil; While (m01<>nil) or (m02<>nil) do Begin If m01<>nil then Begin n1:=m01^.a; m01:=m01^.n; end else n1:=0; If m02<>nil then Begin n2:=m02^.a; m02:=m02^.n; end else n2:=0; New(mt); mt^.p:=m; mt^.n:=nil; If m<>nil then m^.n:=mt; If n1+n2+k<10 then Begin mt^.a:=n1+n2+k; k:=0; end else Begin mt^.a:=(n1+n2+k) mod 10; k:=(n1+n2+k) div 10; end; m:=mt; end; While m^.p<>nil do m:=m^.p; end; Begin { == DEMO-TEST == } GetLongNumSt('1234567890',a1); GetLongNumInt(987654321,a2); ShowLongNum(a1); ShowLongNum(a2); LongSum(a1,a2,a); { a1+a2 = 2222222211 } ShowLongNum(a); { =============== } DisposeMT(a1); DisposeMT(a2); DisposeMT(a); End.
Объяснение кода листинга программы
- Тип данных
cif
представляет собой диапазон от 0 до 9. - Тип данных
mas
представляет собой указатель на структуруtmas
. - Структура
tmas
содержит поляa
(целое число от 0 до 9),p
иn
(указатели на другие элементы списка). - Переменные
a
,a1
иa2
представляют собой ссылки на первый элемент списка. - Функция
DisposeMT
освобождает память, используя циклwhile
для прохода по списку и вызова функцииDispose
для каждого элемента. - Функция
GetLongNumSt
принимает строку и создает список, содержащий числовые значения каждого символа строки. - Функция
GetLongNumInt
принимает длинное целое число и создает список, содержащий отдельные цифры этого числа. - Функция
LongNumInSt
принимает список и строку и добавляет символы чисел из списка в строку. - Функция
ShowLongNum
принимает список и выводит его на консоль. - Функция
LongSum
принимает три списка и объединяет их в один список, выполняя сложение отдельных цифр. - В основной части программы создаются списки
a1
иa2
, содержащие числа из строки и числа из длинного целого числа соответственно. - Затем списки выводятся на консоль, сумма их элементов сохраняется в списке
a
, которая затем также выводится на консоль. - Наконец, память, выделенная для списков, освобождается с помощью функции
DisposeMT
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д