Информатика и технология программирования


Двоично-десятичная арифметика


Существует другая, весьма удобная, хотя и не столь эффективная форма представления данных, позволяющая выполнять арифметические операции произвольной точности. Она основана на сохранении десятичной системы счисления, при этом операции производятся над каждой цифрой числа отдельно с учетом взаимного влияния десятичных разрядов через переносы, заемы и т.п.. Возможны два варианта представления десятичных цифр :

-отдельная цифра представлена 4 битами (тетрадой, шестнадцатеричной цифрой) ;

-цифра задана символом во внешней форме представления, а само число - текстовой строкой.

Например, число 17665 выглядит в этих формах представления следующим образом :


char s[]=" 17665" ;
long ss=0x00017655;

В качестве иллюстрации технологии работы с отдельными цифрами числа в десятичной системе счисления рассмотрим пример функции, добавляющей 1 к числу во внешней форме представления, то есть в виде текстовой строки. Добавление 1 состоит в поиске первой цифры, отличной от 9, к которой добавляется 1. Все встречающиеся " на пути" цифры 9 превращаются в 0. Если процесс " превращения девяток" доходит до конца строки, то производится расширение строки следующей цифрой 1.


//------------------------------------------------------bk48-05.cpp


void inc(char s[])
{
for (int i=0; s[i]!=0; i++); // Поиск конца строки


for (int n=i-1; n&#62=0; n--) // Младшая цифра - в конце


{
if (s[n]== 9 ) // 9 превращается в 0


s[n]= 0 ;
else { s[n]++; return; } // добавить 1 к цифре и выйти


}
for (s[i+1]=0; i&#62 0; i--) // Записать в строку 1000...


s[i]= 0 ;
s[0]= 1 ;}




- Начало -  - Назад -  - Вперед -