Двоично-десятичная арифметика
Существует другая, весьма удобная, хотя и не столь эффективная форма представления данных, позволяющая выполнять арифметические операции произвольной точности. Она основана на сохранении десятичной системы счисления, при этом операции производятся над каждой цифрой числа отдельно с учетом взаимного влияния десятичных разрядов через переносы, заемы и т.п.. Возможны два варианта представления десятичных цифр :
-отдельная цифра представлена 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>=0; n--) // Младшая цифра - в конце
{
if (s[n]== 9 ) // 9 превращается в 0
s[n]= 0 ;
else { s[n]++; return; } // добавить 1 к цифре и выйти
}
for (s[i+1]=0; i> 0; i--) // Записать в строку 1000...
s[i]= 0 ;
s[0]= 1 ;}