あけましておめでとうございます!!
今年もよろしくお願いします
2023年になったということで、今回は2023をn進法(2 <= n <= 9)で表わそうと思いやってみました。
①実装の仕方を考える
2023をn進数に変換する前に、ひとまず2進数に変換できるかやってみましょう。
(n進数に関しては高校数学 数学Aにあるのでそこで学習するというのもアリです。)
2で割り続けます
2023 = 1011 * 2 + 1
1011 = 505 * 2 + 1
505 = 252 * 2 + 1
252 = 126 * 2 + 0
126 = 63 * 2 + 0
63 = 31 * 2 + 1
31 = 15 * 2 + 1
15 = 7 * 2 + 1
7 = 3 * 2 + 1
3 = 1 * 2 + 1
1 = 0 * 2 + 1
という感じになると思います。そして下から順に追っていけば2進数になるので
2023の2進数表記は
11111100111
になります。
長くなりましたが、これで2進数表記にすることができました。
という感じに実装していくことでn進数に変換することができます。
ここでは2進数と3進数に変換するコードを載せておきます。
言語はPythonです。
#2進数に変換する
def f2(n):
a = []
while n != 0:
a.append(n % 2)
n = n // 2
a.reverse()
for i in range(len(a)):
print(a[i], end="")
print("")
#3進数に変換する
def f3(n):
a = []
while n != 0:
a.append(n % 3)
n = n // 3
a.reverse()
for i in range(len(a)):
print(a[i], end="")
print("")
他の数でも同様に実装していくことで変換することができます。
実装をより良くする
viralさんに教えて頂いたのですが、
出力の際に
print(*a, sep="")
のようにすると良いと教わりました。ありがとうございます。
確かにこれの方が簡単に書けますよね。
ちなみにアンパックと呼ばれる操作をしています。
②結果
是非実装してそのような結果になるよう実装してみてください。
(値がこのようになるかは確認してあります。もし間違いなどありましたらコメントでお願いします。)
③感想
1月1日に書いているのですが、2023にまつわることをしたいと思い、n進法に変換するというのをやってみました。AtCoderさんのコンテストで時々見かけたりするので自分としては実装における良い練習になったかと思います。簡単ですが、ここらへんで終わりにします。
④参考文献
アンパックに関する記事です。参考にさせて頂きました。
この問題は個人的にお気に入りですかね。名前といい、n進数にまつわる問題なので好きですね。みなさんも是非考えてみてください。
⑤余談
毎年1日中起きることができす、今年は2~4時の間に寝落ちしてました。
来年こそは!!