Редакция для Символ в шестнадцатеричный код


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.

1. Идея

Нужно прочитать один символ, узнать его ASCII-код и вывести этот код в шестнадцатеричной системе счисления.

По условию ответ должен состоять ровно из двух символов:

  • использовать цифры 09 и буквы af,
  • если шестнадцатеричная запись короткая, слева нужно дописать 0.

Например:

  • символ ! имеет ASCII-код 33, это 21 в шестнадцатеричной системе;
  • символ 0 имеет ASCII-код 48, это 30.

2. Наблюдения

  1. Ввод содержит ровно один печатный ASCII-символ.
  2. У каждого символа есть числовой код:
    • в C++ его можно получить приведением char к целому типу;
    • в Python для этого используется ord.
  3. Остаётся только перевести число в шестнадцатеричный вид.
  4. Так как код символа лежит от 33 до 126, шестнадцатеричная запись всегда занимает не больше двух символов.
  5. Поэтому удобно сразу форматировать вывод как число ширины 2 с ведущим нулём.

3. Алгоритм

  1. Считать один символ.
  2. Получить его ASCII-код.
  3. Вывести код в шестнадцатеричной системе:
    • строчными буквами,
    • шириной 2,
    • с ведущим нулём при необходимости.

4. Почему это работает

По определению ASCII каждый допустимый входной символ однозначно соответствует своему числовому коду.

Дальше требуется не делать никаких преобразований над самим символом, а только:

  • взять его код,
  • записать этот код в системе счисления с основанием 16,
  • оформить запись ровно двумя символами.

Используемое форматирование делает именно это:

  • переводит число в шестнадцатеричный вид;
  • использует строчные буквы;
  • добавляет ведущий 0, если длина меньше двух.

Значит, программа выводит ровно ту строку, которая требуется в условии.

5. Сложность

Время работы: O(1).

Память: O(1).

6. Код на C++17

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    char c;
    cin >> c;
    cout << hex << nouppercase << setw(2) << setfill('0') << (int)(unsigned char)c;
    return 0;
}

7. Код на Python 3

c = input()
print(format(ord(c), '02x'))

Комментарии

Еще нет ни одного комментария.