数学上把2的K次方叫2的K次幂,如4、8、32等。给定一个整数n,请输出距离它最近的那个2的幂是多少。如果有两个距离相同,输出那个小的。
输入
17
输出
16
def is_power_of_2(n):
if n == 1:
return True
elif n % 2 == 1 or n == 0:
return False
else:
return is_power_of_2(n // 2)
数学上把2的K次方叫2的K次幂,如4、8、32等。给定一个整数n,请输出距离它最近的那个2的幂是多少。如果有两个距离相同,输出那个小的。
输入
17
输出
16
def is_power_of_2(n):
if n == 1:
return True
elif n % 2 == 1 or n == 0:
return False
else:
return is_power_of_2(n // 2)
一个实现,如下:
def is_power_of_2(n):
if n == 1:
return True
elif n % 2 == 1 or n == 0:
return False
else:
return is_power_of_2(n // 2)
n=int(input()) # 从输入获取n的值,并转为int类型
temp=n # 使用temp备份n的值
# 下面这个while循环用于寻找比n大的最近的一个2的K次幂
while True:
if is_power_of_2(temp)==True: # 如果当前的数是2的K次幂,则将当前的数赋值为最近的大的2的K次幂,并break退出循环
big=temp
break
else: # 否则,将temp+1,然后判断下一个较大的数
temp+=1
temp=n # 同上,使用temp备份n的值
# 这个while循环用于寻找比n小最近的一个2的K次幂
while True:
if is_power_of_2(temp)==True: # 同上,如果当前的数是2的K次幂,则将当前的数赋值为最近的小的2的K次幂,然后break退出循环
small=temp
break
else: # 否则,temp减去1,判断下一个较小的数
temp-=1
smallDistance=n-small # 计算小的数离n的距离
bigDistance=big-n # 计算大的数离n的距离
if smallDistance<=bigDistance: # 如果小的数距离小于等于大的数距离,则将最终结果赋值为小的数
result=small
else: # 否则,将结果赋值为大的数
result=big
# 打印结果
print(result)