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

如何用布尔逻辑实现任意二进制数转十进制(无分支/函数)

问题解决方案

你的代码存在两个核心问题:

  1. 索引越界:当输入的二进制数长度不足7位时,尝试访问number_str[-5]这类超出字符串长度的索引会报错;
  2. 权重对应错误:你当前的代码是从右往左取字符计算权重,和任务要求的“左到右对应128至1”的规则相反,导致结果偏差。

修复后的代码(简洁版)

number = 1010111  # 替换为你的输入
number_str = str(number).rjust(8, '0')  # 补前导零至8位,避免索引错误
decimal = (
    int(number_str[0]) * 128
    + int(number_str[1]) * 64
    + int(number_str[2]) * 32
    + int(number_str[3]) * 16
    + int(number_str[4]) * 8
    + int(number_str[5]) * 4
    + int(number_str[6]) * 2
    + int(number_str[7]) * 1
)
print(decimal)

代码说明

  • 补零处理:rjust(8, '0')将二进制字符串补前导零至固定8位,比如输入1101会转为"00001101",输入1010111转为"01010111",确保每个权重对应的位置都有字符,彻底解决索引越界问题;
  • 权重匹配:严格按照任务要求,从左到右(字符串索引0到7)依次对应128、64、32、16、8、4、2、1的权重,计算结果完全符合预期。

无字符串方法版本(严格遵循无函数要求)

如果rjust被视为函数调用不符合要求,可以手动拼接零:

number = 1010111
number_str = str(number)
# 手动生成前导零并拼接
padded_str = '0000000'[:8 - len(number_str)] + number_str
decimal = (
    int(padded_str[0]) * 128
    + int(padded_str[1]) * 64
    + int(padded_str[2]) * 32
    + int(padded_str[3]) * 16
    + int(padded_str[4]) * 8
    + int(padded_str[5]) * 4
    + int(padded_str[6]) * 2
    + int(padded_str[7]) * 1
)
print(decimal)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 17:04:59