За операцию вычитания отвечает процедура Sub

/* Вычитание длинных чисел длины n цифр C=A-B.

В качестве результата возвращаем заем старшего разряда d */

DIGIT Sub(

DIGIT C[ ],  /* результат */

сonst DIGIT A[ ],  /* уменьшаемое */

const DIGIT B[ ],  /* вычитаемое */

int n) /* длина чисел */

{

TWODIGIT T;

DIGIT d=0;

int i;

for(i=0; i<n; i++)

{              T = (TWODIGIT)A[i]-B[i]-d;

C[i] = LODIGIT(T);

d = HIDIGIT(T);

d = (0-d);

}

return d;

}

Пример на Паскале.

Procedure Sub (Var A : TLong; Const B : TLong; Const sp : Integer);

Var i, j : Integer;

{из А вычитаем В с учетом сдвига sp, результат вычитания в А}

Begin

For i := l To B[0] Do

Begin Dec(A[i+sp], B[i]);

j: = i;

{реализация сложного заимствования}

while (A[j+sp] < 0) and (j <= A[0]) Do

Begin

Inc(A[j+sp], Osn) ;

Dec(A[j+sp+l]); Inc(j);

end;

{If A[i+sp]<0 Then Begin Inc(A[i+sp], Osn);

Dec (A[i+sp+l]);End;}

End;

i := A[0];

While (i > l) And (A[i] = 0) Do Dec(i);

A[0] := i

{корректировка длины результата операции}

End;