![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
AliasVeter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 15.11.2012 Репутация: нет Всего: нет |
Доброй ночи. Задача простая. Написать программу для перевода числа из десятичной системы счисления в шестнадцатеричную. Использовать можно только операторы if, if...else, switch и циклы while, for. Мой код работает правильно, но мне кажется я намудрил. Как можно оптимизировать код используя только указанные выше операторы?
И почему программа не выводит ничего, если пользователь ввел ноль? UPD: разобрался.
Это сообщение отредактировал(а) AliasVeter - 18.6.2015, 20:38 |
|||
|
||||
Guinness |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: 2 Всего: 10 |
Я бы исключил переменные a, b, c и записывал результат вычисления в массив. А потом уже в цикле последовательно преобразовывал элемента массива в символы. Также заменил бы сдвигами целочисленное умножение и деление на 16, но это уже на любителя, кому что больше нравится.
|
|||
|
||||
AliasVeter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 15.11.2012 Репутация: нет Всего: нет |
Спасибо за ответ. До массивов я пока не дошел. А если без них?
|
|||
|
||||
Guinness |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: 2 Всего: 10 |
Так, ну давайте подумаем. Что мы знаем о шестнадцатиричных числах и int. Размер int`а в байта можно узнать с помощью sizeof. Одно шестнадцатиричное число - это 4 бита => один байт можно закодировать двумя шестнадцатиричными числами. Таким образом:
Далее, выводить нам нужно начиная со старшего значащего шестнадцатиричного числа. Т.е. схема будет выглядеть так:
Как-то так, естественно, на каждой итерации result нужно будет выводить. Осталось закодировать. Добавлено через 9 минут и 46 секунд И да, при битовом смещении вправо(>>) лучше пользоваться беззнаковыми числами. Иначе в случае, если старший значащий бит будет 1, то его может размножить при смещении, если я не ошибаюсь. |
||||
|
|||||
AliasVeter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 15.11.2012 Репутация: нет Всего: нет |
Оптимизировал код.
Это сообщение отредактировал(а) AliasVeter - 18.6.2015, 21:35 |
|||
|
||||
Guinness |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: 2 Всего: 10 |
То, что я Вам советовал сделать, выглядит вот так http://ideone.com/fWYMac, вдруг кому интересно будет.
ЗЫ я косякнул, конечно, не sizeof(int) << 2, а sizeof(int) << 1. |
|||
|
||||
AliasVeter |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 15.11.2012 Репутация: нет Всего: нет |
Guinness, ваш код работает правильно, но чисто с эстетической точки зрения некорректно выводит результат. Все равно спасибо, он намного компактней моего.
Это сообщение отредактировал(а) AliasVeter - 20.6.2015, 00:23 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |