Редакция для Символ в шестнадцатеричный код
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.
Submitting an official solution before solving the problem yourself is a bannable offence.
1. Идея
Нужно прочитать один символ, узнать его ASCII-код и вывести этот код в шестнадцатеричной системе счисления.
По условию ответ должен состоять ровно из двух символов:
- использовать цифры
0–9и буквыa–f, - если шестнадцатеричная запись короткая, слева нужно дописать
0.
Например:
- символ
!имеет ASCII-код33, это21в шестнадцатеричной системе; - символ
0имеет ASCII-код48, это30.
2. Наблюдения
- Ввод содержит ровно один печатный ASCII-символ.
- У каждого символа есть числовой код:
- в C++ его можно получить приведением
charк целому типу; - в Python для этого используется
ord.
- в C++ его можно получить приведением
- Остаётся только перевести число в шестнадцатеричный вид.
- Так как код символа лежит от
33до126, шестнадцатеричная запись всегда занимает не больше двух символов. - Поэтому удобно сразу форматировать вывод как число ширины
2с ведущим нулём.
3. Алгоритм
- Считать один символ.
- Получить его ASCII-код.
- Вывести код в шестнадцатеричной системе:
- строчными буквами,
- шириной
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'))
Комментарии