Я только начал знакомиться с "длинной математикой", по поиску нашел много тем, в которых всех посылают сюда
Я пытался там что-то понять, но безуспешно. Наверное нужно быть матерым програмистом чтобы разобраться.
Потом я где-то в сети нашел тоже самое, только оформлено куда проще для восприятия, вот например:
умножение:
Program DlUmn;
Const NMax = 2000;
Type Digit = 0..9; DlChislo = Array[1..Nmax] Of Digit;
Var S : String;
M, N, R, F : DlChislo;
I, MaxF : Word;
Logic : Boolean;
Procedure Zero(Var A : DlChislo);
Var I : Integer;
Begin
For I := 1 To NMax Do A[I] := 0;
End;
Function Dlina(C : DlChislo) : Integer;
Var I : Integer;
Begin
I := NMax;
While (I > 1) And (C[I] = 0) Do I := I - 1;
Dlina := I
End;
Procedure Print(A : DlChislo);
Var I : Integer;
Begin
For I := Dlina(A) DownTo 1 Do Write(A[I] : 1);
WriteLn
End;
Procedure Translate(S : String; Var A : DlChislo;
Var OK : Boolean);
Var I : Word;
Begin
Zero(A); I := Length(S); OK := True;
While (I >= 1) And OK Do
Begin
If S[I] In ['0'..'9']
Then A[Length(S) - I+ 1] := Ord(S[I]) - 48
Else OK := False;
I := I - 1
End
End;
Procedure Multiplication(A, B : DlChislo; Var C : DlChislo);
Var I, J : Integer; P : Digit; VspRez : 0..99;
Begin
Zero(c);
For I := 1 To Dlina(A) Do
Begin P := 0;
For J := 1 To Dlina(B) Do
Begin
VspRez := A[I] * B[J] + P + C[I + J - 1];
C[I + J - 1] := VspRez Mod 10;
P := VspRez Div 10
End;
C[I + J] := P
End
End;
Begin
Repeat
Write('Введите первый множитель: ');
ReadLn(S); Translate(S, M, Logic)
Until Logic;
Repeat
Write('Введите первый множитель: ');
ReadLn(S); Translate(S, N, Logic)
Until Logic;
Multiplication(M, N, R); Print(r)
End.
Не лучше ли объяснять проще, учитывая что сюда приходят не только программеры с многолетним стажем?
Сообщение отредактировано: volvo -