| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > Узнать кол-во разрядов в неком числе |
| Автор: En_t_end 1.8.2005, 14:53 |
| ...с помощью математико-синтаксических манипуляций в C++. Что-то мне подсказывает, что решение кроется в испольовании '%' и манипуляции с остатками от деления. |
| Автор: maxim1000 1.8.2005, 15:01 |
| а как заданно число? если оно вводится через строку - просто количество символов если оно представлено чем-то вроде int, то тут есть два варианта: 1. делаем цикл, делим число на N(основание системы счисления), пока не ноль, количество делений - количество разрядов 2. берем логарифм от числа по основанию N, его целая часть - количество разрядов... |
| Автор: Akina 1.8.2005, 15:01 |
| Конвертировать в строку, отбросить (при наличии) порядок, вырезать точку, удалить с обоих концов оставшейся строки нули-пробелы... длина строки = кол-ву разрядов числа. Осталось избежать ошибки представления. |
| Автор: maxim1000 1.8.2005, 15:03 |
| упс... не подумал о нецелых числах... |
| Автор: En_t_end 1.8.2005, 15:04 |
| maxim1000 unsigned long Akina Как-то это растратно по ресурсам |
| Автор: Akina 1.8.2005, 15:11 | ||
Тогда граничная таблица - быстрее по-любому не будет. |
| Автор: maxim1000 1.8.2005, 15:16 | ||
если прикрутить двоичный поиск, то да... а если линейный, то еще неизвестно, что быстрее - деление или таблица (там все в регистрах, но деление, а там - доступ к памяти) |
| Автор: Akina 1.8.2005, 15:39 |
| maxim1000 м-м-м... деление-сравнение... по конвейерам не разбросаешь... а вот чтение-сравнение (если опоздать на команду) - запросто. |
| Автор: maxim1000 1.8.2005, 15:44 | ||
не очень уверен, но мне кажется, что в случае деления как такового сравнения и не нужно насколько я припоминаю, во многих процессорах есть флаг, содержащий (последний результат==0) (по крайней мере на некоторых процессорах, с которыми я работал, такой флажок был) |
| Автор: Akina 1.8.2005, 15:57 |
| есть... ZF... даже в 4004 процессоре был. Однако должен огорчить - DIV reg16 не меняет ZF... так что по-любому OR ax,ax; JE label; |
| Автор: En_t_end 1.8.2005, 16:53 | ||||
То есть такой вариант будет верен при любом X(unsigned long) ?
|
| Автор: maxim1000 1.8.2005, 16:55 | ||
вроде должен но с таблицой все должно бы быть быстрее (если вдруг сопроцессор не вздумает вычислять log за несколько тактов) |