Сложение длинного числа
Сложение длинного числа

Приведем реализацию алгоритма сложения, а также ввод и вывод длинного числа на Паскале.

{основная программа}

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
Скачать бесплатно » Информатика и программирование » Задачи и решения


|