AtCoder ABC 136 B – Uneven Numbers Python解説

スポンサーリンク

Uneven Numbers

整数 N が与えられます。N 以下の正の整数のうち、(先頭に 0 をつけずに十進法で表記したときの) 桁数が奇数であるようなものの個数を求めてください。

AtCoder Beginner Contest 「Uneven Numbers」

整数Nの桁数が奇数か偶数か、奇数なら個数を数え上げていくということなので、len関数で文字列数を出し、奇数・偶数の判定をしていこうと思います。

n = int(input())

ans = 0

for i in range(1, n + 1):
    i = str(i)
    if len(i) % 2 != 0:
        ans += 1
        
print(ans)

len関数は文字列にしか使えないので、一度str関数を使い文字列にしたあとでlen関数を使っています。
奇数の場合はansをカウントアップしていき、最後に出力して完了です。

この問題ではNの取り得る範囲が100000までなので次のようにも解けます。

n = int(input())

ans = 0

for i in range(1, n + 1):
    if 1 <= i <= 9 or 100 <= i <= 999 or 10000 <= i <= 99999:
        ans += 1
        
print(ans)

奇数になる数値の範囲をあらかじめ求めています。視覚的に分かりやすいのでおすすめです。