Большой Воронежский Форум
» Программирование>Помогите с формализацией
DeniSS1 17:51 26.05.2010
Первый раз со мной такое - могу решить задачку на бумаге, а алгоритмизировать не могу.
На спор делаю программу, которая переводит числа из 2-чной системы счисления в 36-ричную. Основная идея: представим двоичное число в виде булева массива, где 1 или 0 в i-й ячейке будут означать, есть ли в числе i-ая степень двойки или нет.
36 = 2^2 + 2^5. Теперь будем последовательно возводить 2^2 + 2^5 во всё большие и большие степени (хранить результат можно также в бул. массиве). Пусть текущая степень j. Будем считать возведение оконченным, если разность макс. степени двоичного числа и макс. степень 2-ки в (2^2 + 2^5)^j меньше 5 (больше не влезет в один разряд) Теперь нужно поделить многочлен двоичного числа на (2^2 + 2^5)^j, стараясь минимизировать остаток, но при этом частное не должно быть больше 2^2 + 2^5. Затем нужно уменьшить степень 36 на единицу и проделать тоже с остатком (поделить его на (2^2 + 2^5)^(j-1)) - и т.д., пока не дойдём до 36^0. Проблема в том, что вроде бы подходящее на данном шаге частное может выдать хреновый (превышающий следующий разряд) остаток на следующем... или на послеследующем... или вообще на конечном шаге. Т.е. алгоритм должен быть ещё и рекурсивным. Это разрывает мне мозг [Ответ]
Part!zan 21:52 26.05.2010
А числа любые или есть ограничения? [Ответ]
DeniSS1 22:09 26.05.2010
Part!zan, ограничений нет, так что или писать функционал для работы с длинными числами, либо пытаться реализовать вот это. [Ответ]
Spectator 22:50 26.05.2010

Сообщение от DeniSS1:
Первый раз со мной такое - могу решить задачку на бумаге, а алгоритмизировать не могу.
На спор делаю программу, которая переводит числа из 2-чной системы счисления в 36-ричную.

Тебе будет нужна символьная математика для таких задач (такую библиотеку можно в данном случае написать и самому, но что-то мне кажется, что тебе это не под силу будет).
А сам алгоритм не такой уж сложный, чтобы не марать форум: http://algolist.manual.ru/maths/teornum/count_sys.php [Ответ]
DeniSS1 12:26 30.05.2010
Spectator, спасибо [Ответ]
Вверх