Приведем реализацию алгоритма сложения, а также ввод и вывод длинного числа на Паскале. {основная программа} Var A, B, C : Tlong; Begin Assign(Input, ‘Input.txt’); Reset(Input); ReadLong(A); ReadLong(B) ; Close(Input); SumLongTwo(A, B, C); Assign(Output, ‘Output.txt’); Rewrite(Output); WriteLong(C); Close(Output) End. {процедура ввода длинного числа} Procedure ReadLong(Var A : Tlong); Var ch : char; i : Integer; Begin FillChar(A, SizeOf(A), 0) ; Read(ch); While Not(ch In ['0'..'9']) Do Read(ch); {пропуск не цифр во входном файле} While ch In ['0'..'9'] Do Begin For i := A[0] DownTo 1 Do Begin {«протаскивание» старшей цифры в числе из A[i] в младшую цифру числа из A[i+l]} A[i+l] := A[i+l] + (LongInt(A[i]) * 10) Div Osn; A[i] := (LongInt(A[i]) * 10) Mod Osn End; A[1] := A[l] + Ord(ch) – Ord(’0′); {добавляем младшую цифру к числу из А[1]} If A[A[0]+1] > 0 Then Inc(A[0]); {изменяем длину, число задействованных элементов массива А} Read(ch) End End; {процедура вывода длинного числа} Procedure WriteLong(Const A : Tlong); Var ls, s : String; i : Integer; Begin Str(Osn Div 10, Is); Write(A[A[0]]; {выводим старшие цифры числа} For i := A[0] – l DownTo 1 Do Begin Str(A[i], s); While Length(s) < Length(Is) Do s := ’0′ + s; {дополняем незначащими нулями} Write(s) End; WriteLn End; {процедура сложения двух длинных чисел} Procedure SumLongTwo(A, B : Nlong; Var C : Tlong); Var i, k : Integer; Begin FillChar(C, SizeOf (C), 0) ; If A[0] > B[0] Then k := A[0] Else k :=B[0]; For i := l To k Do Begin С [i+1] := (C[i] + A[i] + B[i]) Div Osn; C[i] := (C[i] + A[i] + B[i]) Mod Osn End; If C[k+l] = 0 Then C[0] := k Else C[0] := k + l End; | |
Просмотров: 430 | Добавлено: 10.03.2015, 04:16 |