zhou11119 2023-12-06 18:53 采纳率: 83.7%
浏览 2
已结题

寻找2的幂python

数学上把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条回答 默认 最新

  • a5156520 2023-12-06 18:57
    关注

    一个实现,如下:

    
    
    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)
    
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月14日
  • 已采纳回答 12月6日
  • 创建了问题 12月6日

悬赏问题

  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物