いももちのきもち

悪戦苦闘の歴史のメモ

ある数n以下の最大の2の累乗の値を求める

解答1

素直な解答です

n = int(input())
i = 1
while ( i * 2 <= n):
    i *= 2
print(i)

Submission #1480413 - AtCoder Beginner Contest 068 | AtCoder

解答2

それほど素直ではないかもしれない解答です

print(2**(len(str(bin(int(input())))[2:])-1))

Submission #1480441 - AtCoder Beginner Contest 068 | AtCoder

解説

# 数値読み込み
n = int(input()) # n = 9 とする

# 2進数化
$ bin(9)
0b1001 # 0桁目と3桁目に1がある

# 数値から文字列へ、ついでに頭をとる
$ str(0b1001)[2:]
"1001"

# 桁数を得る
len("1001") # = 4

# 10進数表示に直す
2 ** (4 - 1) = 8

※翌日追記
bin()では文字列を返すので上のstr()いらんかった