Goodefine, разговор постепенно перетекает в русло общих рассуждений...
я не знаю, что программа должна делать для оптимальности... наверное, в первую очередь она должна делать задуманное программистом. просто ваш пример с выводом результата X/Y на дисплей - бессмыслица, для этих целей программы не пишут. но тем не менее, мне кажется, что компактность кода для моего алгоритма и для вашего будет в мою пользу, хотя для некоторых (возможно, очень многих) значений X и Y по быстродействию ваш будет впереди.
если говорить об оптимальности программирования вообще, то для зыка высокого уровня, каковым безусловно является Си, под оптимальностью скорее всего следует понимать именно лаконичность и функциональность исходного текста. кому нужна оптимальность в тактах процессора - переходит на ассемблер... задача ЯВУ -
сократить усилия программиста по написанию, отладке и, возможно, последующей модификации/адаптации текста программы под новые задачи, и в этом контексте безусловно подход с использованием
гибкого изначально алгоритма (пусть даже немного медленного) следует признать более правильным и более оптимальным. все равно высока вероятность, что программа 80% и даже больше времени будет проводить в бесполезных циклах ожидания событий - почему же тогда надо отказываться от "медленных" операций деления, если такой отказ ухудшает качество программного текста?
что касается "простых" функций - то ваша функция наоборот
более сложна. она использует алгоритм, сложность (объемность) которого зависит от числа конвертируемых разрядов, и для, скажем, числа
long может превысить разумные пределы. кстати, попробуйте подсчитать количество итераций циклов для конвертации числа 9999 по вашему алгоритму и по моему - без учета времени их исполнения пока что... а когда вы поселитесь в матрице и начнете в одной программе конвертировать числа в разные системы счисления - ваша программа превратится в изобилие функций, каждая из которых работает по своему "уникально быстрому" алгоритму, но в целом программа станет крайне неудобной, плохо читаемой...
ваше сравнение моего варианта по универсальности со
sprintf не очень удачно. у меня универсальный алгоритм для единственной задачи - конвертации числа, а у
sprintf - алгоритм поддержки множества разных задач, которые никогда все сразу не требуются.
наконец, касательно строк и символов. возможно, вы не обратили внимания, что моя функция работает с
таблицей символов, и потому без изменения алгоритма может преобразовывать числа в символы
любой кодировки, даже такой, в которой цифры идут не подряд (т.е. прибавление смещения в этом случае не помогает). в частности, моя функция прекрасно позволяет выводить знаки на семисегментные индикаторы, которым, как известно, на ASCII наплевать полностью... будет ли ваша функция так же легко с этим справляться?
все мои рассуждения носят, конечно, несколько отвлеченный, абстрактный характер (не воспринимайте их как критику вашего подхода), их применимость естественно определяется конкретными условиями...