愛媛県宇和島市 みんなのパソコン教室 代表の松井です
今回は、国家資格であるITパスポートや基本情報技術者試験、高校の授業「情報1」にも出てくる「基数変換」のアルゴリズムを考えてみましょう。
今回は10進数(正の整数)を2進数に変換するアルゴリズムを考え、pythonでプログラミングしました。基数変換の基礎を確認するとともにアルゴリズムを実装する力を鍛えましょう。
10進数→2進数
10進数(正の整数)を2進数に変換する方法は、10進数の数値を「 0 」になるまで「 2 」で割り、その「余り 」を並べることで、10進数の値を2進数の値へ変換します。
以下の図のように計算します。
10進数の160を商が0になるまで2で割っていくと、上図のようになります。その余りを下から並び替えた「10100000」が10進数の160を2進数に変換したものです。
これをもとにアルゴリズムを考えます。
〇キーボードから入力された値を商が0になるまで2で割っていく。
〇その余りを逆から並び替えて表示する。
これだけのシンプルなものです。
#キーボードから入力された値を変数aに代入
sho = int(input())
amariList = []
ans = ""
#値を2で割った商が0になるまでその余りをリストに入れます
while sho != 0:
amariList.append(sho % 2)
sho = sho // 2
#余りが入ったリストを逆に並び替え文字列として結合します
amariList.reverse()
for i in amariList:
ans += str(i)
#文字列として結合された2進数のデータを数値にし表示します
print(int(ans))
余りを逆順に並び替えて文字列として結合しましょう。文字列にせず、数値のまま加算すると答えがおかしくなるので注意です。
もう少しシンプルにしてみます。逆順に並び替えて結合するところを最初のwhileのループの中にまとめました。
sho = int(input())
amariList = []
ans = ""
while sho != 0:
ans = str(sho % 2) + ans
sho = sho // 2
print(int(ans))
今回は、アルゴリズムを考えるためこのような書き方をしました。ただ、10進数を2進数に変換するだけなら、bin関数やformat関数などを使うやり方もあります。
いろいろなやり方で基数変換についても理解していきましょう。
宇和島市の中高校生向けのプログラミングはこちらから
宇和島ウエノマチハックスタジオ プログラミング部
宇和島市の小学生向けのプログラミングはこちらから
みんなのパソコン教室宇和島本校 ジュニアプログラミング講座