方法1:分值算法,按照二分法分成左右,mid=l+(r-l)//2,然后左右分治。
方法2:找规律=
f
l
o
o
r
(
l
o
g
2
n
)
+
1
floor( log_{2}n ) +1
floor(log2n)+1 =
l
e
n
(
b
i
n
(
n
)
)
−
2
len(bin(n))-2
len(bin(n))−2 = /2的循环次数
#本题的主要思想就是,怎么在最小次数内将最大值(最后一个值)减到0
n = int(input())
for i in range(n):
num = int(input())
cnt = 0
while num != 0:
num //=2
cnt += 1
print(cnt)
本就是 f l o o r ( l o g 2 n ) + 1 次 floor( log_{2} n ) +1次 floor(log2n)+1次
直接计算这个值也是可以的,或者使用二进制位移>>1的次数,也就是 l e n ( b i n ( n ) ) − 2 len(bin(n))-2 len(bin(n))−2次
n = int(input())
for i in range(n):
num = int(input())
print(len(bin(num)) -2)
#二进制的有效位数,如bin(5)=0b101,有效位数=len-2=3