ISSN 2305-5626. Вестник МГТУ им. Н.Э. Баумана: электронное издание. 2013
3
#include "InputAB.h"
void main(void)
{ char sa[256]; // символьный буфер целого числа a
unsigned char a[256]; // байтовый массив целого числа a
char sb[256]; // символьный буфер целого числа b
unsigned char b[256]; // байтовый массив целого числа b
InputAB( sa, a, sb, b ); // ввод чисел a и b
_getch(); // просмотр результата
}
Если в программе
HI01
ввести число
57
a
=
и число
8
b
=
, то на
мониторе появится следующий результат:
sa = +57
a = 00000111 00000101 00101011
sb = +8
b = 00001000 00101011
Одноразрядное байтовое умножение.
В дальнейшем для реали-
зации поиска дихотомического множителя потребуется функция
Sin-
gleMultiply
( ), выполняющая умножение целого числа
b
произвольно-
го размера на одноразрядное целое число
e
. Результат умножения
размещается в массиве
c b e
= ∗
. В функции
SingleMultiply
( ) параметр
int nb1
содержит количество байтов в числе
b
без учета знака числа.
Функция возвращает число байтов в массиве
c
без учета знака ре-
зультата.
int inline SingleMultiply( unsigned char* c, unsigned char* b,
int nb1, int e )
{ c[nb1] = 0; // позиция для старшей цифры переноса
for( int i = 0; i < nb1; i++ )
c[i] = b[i] * e; // поразрядное умножение
for( int j = 0; j < nb1; j++ ) // поразрядный перенос
{ if( c[j] > 9 ) // двухзначное число после умножения
{ c[j+1] += c[j] / 10; // перенос старшей цифры
c[j] = c[j] % 10; // младшая цифра умножения
}
}
if( c[nb1] == 0 ) return nb1;//длина результата без переноса
return nb1 + 1; // длина результата с переносом
}
В
представленной
ниже
программе
HI02
функция
SingleMultiply
( ) выполняет умножение
c a b
= ∗
:
// Program HI02 (Win32)
// Умножение одноразрядного целого числа на байтовое число
#include <conio.h> // _getch
#include <iostream>
using namespace std;
#include "InputAB.h"
#include "SingleMultiply.h"
void main(void)
{ char sa[256]; // символьный буфер целого числа a
unsigned char a[256]; // байтовый массив целого числа
char sb[256]; // символьный буфер целого числа b
unsigned char b[256]; // байтовый массив целого числа b
InputAB( sa, a, sb, b ); // ввод чисел a и b
1,2 4,5,6,7,8,9,10,11,12,13,...18