ある数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()いらんかった