You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PCTC竞赛代码运行时错误求助:寻找首个大于n的2的幂次

问题求助:寻找大于n的首个2的幂次代码运行时错误

题目背景

PCTC Sample R2 Q3:输入数字n,输出第一个大于n的2的幂次。示例:输入6,输出8。

我的代码

n = int(input())
i = 1
while n > 0:
  if 2**i > n:
      print(2**i)
      break
  i += 1

问题情况

提交后得分8/10,仅最后一个测试用例报运行时错误,尝试过改用for循环写法,问题依旧。


问题原因及解决方法

你的代码存在边界情况处理缺失的问题:当输入的n <= 0时,while n > 0的循环条件不成立,代码不会执行任何输出语句,评测系统会因得不到预期输出判定为运行时错误——最后一个测试用例大概率是n=0或负数的情况。

修正方案1:补全边界处理

n = int(input())
if n <= 0:
    print(1)
else:
    i = 1
    while True:
        power = 2 ** i
        if power > n:
            print(power)
            break
        i += 1

修正方案2:更高效的位运算写法

利用Python整数的bit_length()方法,一行代码即可完成,同时自动处理所有边界情况:

n = int(input())
print(1 << n.bit_length())
  • 原理:对于正整数n,n.bit_length()返回其二进制表示的位数,比如6(110)的bit_length是3,1 << 3就是8;对于n=0或负数,bit_length()返回0,1 << 0等于1,符合要求(大于0或负数的最小2的幂是1)。

内容的提问来源于stack exchange,提问作者Iffat Humaira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:35:03