AtCoder が提供しているABC(AtCoder Beginner Contest)271 のA問題をC++とPythonで解いてみました。ABC271は、2022年10月1日21:00に実施されました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
A問題 484558(Difficulty : 28)
問題はリンク先をご覧ください。
16進数を扱う問題です。AtCoder Problems による Difficulty は、28 でした。
なお、48 45 58 を16進数として文字コードに変換すると HEX となります。
解答案
問題を解く方針を書きだします。
- 整数を読み込む
- 16進数2桁として出力
問題文の趣旨から、16進数1桁の文字の配列 hex_char を定義しました。問題の16進数は、大きくても2桁の範囲となるため、2桁目(16で割った切り捨て)、1桁目(16で割った余り)を、計算して出力します。
C++ プログラム例(ABC271A)
#include <bits/stdc++.h>
using namespace std;
char hex_char[16] = {'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
int main()
{
int n;
cin >> n;
cout << hex_char[n / 16] << hex_char[n % 16] << endl;
return 0;
}
方針に従い、プログラムしました。
C++(C言語)では、printf で16進数2桁を出力できます。こちらの方が、簡単に書けます。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
printf("%02X\n", n);
return 0;
}
どちらも AC(Accepted=正しいプログラム)と判定されました。
Python プログラム例(ABC271A)
f文字列によって16進数2桁を出力できます。
"""AtCoder Beginner Contest 271 A"""
n = int(input())
print(f"{n:02X}")
Python 版も「AC」と判定されました。
最後に
16進数について、理解する良い問題だと思います。
引き続き ABC の問題を紹介していきます。