
3.5. Обработка многоразрядных чисел
Диапазон чисел, которые можно представить в ячейках памяти ЭВМ, ограничен. Для работы с числами, лежащими вне этого диапазона, требуется применение специальных приемов для размещения таких чисел в памяти и их обработки.
Для представления многоразрядного числа в памяти ЭВМ можно каждую его цифру хранить как элемент массива: самую младшую цифру - количество единиц - в первом элементе массива, количество десятков - во втором и т.д. Старшие незанятые элементы массива следует заполнить нулями.
3.5.1. Сложение многоразрядных чисел
Требуется сложить два целых n-разрядных числа (n£20). Каждое число считается представленным в виде одномерного массива. Результат сложения также будет получаться в одномерном массиве.
Сложение будет осуществляться аналогично сложению двух чисел "столбиком", т.е. складывают одноразрядные цифры двух слагаемых, начиная с младшего разряда. Из полученной суммы двух чисел каждый раз выделяют цифру соответствующего разряда суммы чисел и формируют перенос в следующий разряд. По окончании суммирования значение переноса (если он не равен нулю) считают за самую старшую цифру суммы. Следует иметь в виду, что при сложении двух n-разрядных чисел сумма может оказаться n+1 разрядным числом.
Исходные данные блок-схемы: А,В - массивы для хранения цифр слагаемых размером 20; N - количество цифр в большем слагаемом (N£20), после выполнения суммирования - количество цифр суммы; С - массив для хранения цифр суммы размером 21; D - значение суммы двух I-х цифр; Р - значение переноса в старший разряд; I ‑ счетчик разрядов - управляющая переменная цикла.
Ввод N
Ввод("Поочередно вводят цифры многоразрядных чисел, начиная с младшей")
Для I=1 до N Ввод A(I), B(I) конец цикла
P = 0
Для I = 1 до N
D = A(I)+B(I)+P
P = Int(D/10)
C(I) = D - P · 10
Конец цикла по I
Если Р=0 (Да) ¾¾¾¾¾¾¾¾¾¾Ø
(Нет) ½
N = N + 1 ½
C(N) = P ½
¬¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾û
Для J=N до 1 шаг -1
Вывод С(J)
Конец цикла по I
Чтобы напечатать результат в привычном виде, вывод элементов массива С осуществляется, начиная с конца - со старшего разряда.
3.5.2. Умножение многоразрядных чисел
Требуется умножить n-разрядное число (n £ 20) на целое число K (() < K£ 20) . Считают, что n-разрядное число представлено в виде одномерного массива.
Умножение осуществляют аналогично умножению столбиком. После перемножения i-ой цифры n-разрядного числа и числа K прибавляют к результату перенос из предыдущего разряда и выделяют из полученной суммы количество единиц. Это и будет i-я цифра произведения. После умножения n-й цифры n-разрядного числа на число K и выделения n-ой цифры произведения оставшийся перенос записывают поразрядно в массив, предназначенный для произведения, начиная с (n+1)-го элемента, выделяя цифры, согласно алгоритму "сумма цифр числа".
Исходные данные блок-схемы: А - массив для хранения цифр заданного многоразрядного числа, размером 20; К - целое число, сомножитель (К£100); В - массив - произведение размером 22; N -количество разрядов исходного числа; F - переменная для ввода очередной цифры многоразрядного числа; Р - значение переноса в старший разряд; С - значение суммы произведений i-ой цифры n-разрядного числа на число К и переноса в i-ый разряд.
rem: Ввод числа, начиная с младшей цифры.
rem: Для окончания ввода используют отрицательное число
I = 0
¾¾¾¾¾¾¾¾¾®Ввод F
½ Если F < 0 (Да) ¾¾Ø
½ (Нет) ½
½ I = I+1 ½
ë¾¾¾¾¾¾¾¾ A(I) = F ½
¬¾¾¾¾¾¾û
N = I
Ввод К
rem: начало цикла умножения
Р = 0
Для I = 1 до N
C = A(I) · K + P
P = Int(C/10)
B(I) = C - P · 10
Конец цикла по I
rem: занесение в массив В оставшихся цифр переноса
J = N
¾¾¾¾¾¾¾®Если Р = 0 (Да) ¾¾¾¾¾¾¾Ø
½ (Нет) ½
½ J = J + 1 ½
½ B(J) = P - (Int(P/10)) · 10 ½
ë¾¾¾¾¾¾¾¾P = Int(P/10) ½
¬¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾û
Для L=J до 1 шаг -1
Вывод B(L)
Конец цикла