Он, наверно, хотел написать "запоминаешь остаток". Остаток потом нужно сдвинуть на четыре бита вместе с младшим байтом, опять поделить. И еще раз сдвинуть и еще раз поделить. Итого три деления, и два сдвига по четыре бита.
Ммм.... а поподробнее можно - с примером?
Вообще-то, если призвать на помощь математику, то получаем (для беззнаковых значений, для знаковых - чуть более громоздко) такой алгоритм:
Возьмем число x. У него есть старший байт (u = x/256) и младший (l=x%256)
Тогда:
x= u*256 + l
x= u*250 + u*6 + l
x/10 = u*250/10+(6u+l)/10
x/10 = u*25 + (6u+l)/10 То есть алгоритм такой:
int division(int num) {
byte u=num/256; byte l=num%256;
int rem=6*u+l;
return u*25+(rem>256)?division(rem):rem/10;
}
Совершенно понятно, что ни рекурсивность ни "верхнеуровневость" не мешают - можно вполне реализовать на ассемблере без никаких проблем.
Это сообщение редактировалось 03.06.2004 в 00:39