в учебнике есть листинг для произведения:
//------------------------------------------------------91-11.cpp
//------Умножение целых произвольной разрядности
void mul(uchar out[], uchar aa[], uchar bb[], int n)
{int i,s1=0,s2=0; // Отрицательные числа - прямой код
if (aa[n-1] & 0x80) { neg(aa,n); s1=1; }
if (bb[n-1] & 0x80) { neg(bb,n); s2=1; }
for (i=0; i<n; i++) out[i]=0;
for (i=0; i< n* 8; i++){ // Цикл по количеству разрядов
if (bb[0] & 1 ) // Разряд множителя равен 1
add(out,out,aa,n); // Добавить множимое к произведению
lshift(aa,n); // Множимое - влево
rshift(bb,n); // Множитель - вправо
}
if (s1!=s2) neg(out,n); // Знаки не совпадают - доп. код
}
Добавьте две подпрограмки для конвертации из десятичного представления в двоичное и назад и будет счастье.
//------------------------------------------------------91-11.cpp
//------Умножение целых произвольной разрядности
void mul(uchar out[], uchar aa[], uchar bb[], int n)
{int i,s1=0,s2=0; // Отрицательные числа - прямой код
if (aa[n-1] & 0x80) { neg(aa,n); s1=1; }
if (bb[n-1] & 0x80) { neg(bb,n); s2=1; }
for (i=0; i<n; i++) out[i]=0;
for (i=0; i< n* 8; i++){ // Цикл по количеству разрядов
if (bb[0] & 1 ) // Разряд множителя равен 1
add(out,out,aa,n); // Добавить множимое к произведению
lshift(aa,n); // Множимое - влево
rshift(bb,n); // Множитель - вправо
}
if (s1!=s2) neg(out,n); // Знаки не совпадают - доп. код
}
Добавьте две подпрограмки для конвертации из десятичного представления в двоичное и назад и будет счастье.