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

如何用Python编写函数对输入的n进制数求和并返回对应n进制结果

原有代码问题梳理
  • 代码缩进错误:函数定义下的逻辑代码没有正确缩进,运行会直接触发语法错误
  • 仅遍历了一次所有输入数字,只计算了最低位的和,没有循环处理更高数位,也没有处理高位计算时的进位传递
  • 进位计算逻辑顺序错误:原代码先对tot取余再计算进位,导致carry取值错误,正确顺序应该是先算进位carry = tot // base,再取当前位值tot = tot % base
  • 取高位的运算错误:原代码用num // 10取高位,仅适用于十进制场景,不同进制下应该用num // base取当前数的高位部分
  • 缺少持续循环逻辑:没有判断所有数字是否还有未处理的高位,也没有判断剩余进位是否需要继续计算高位
修复后的实现代码
def sum_base(base, *args):
    s = ""
    carry = 0
    # 把所有输入的数字转成可变列表,方便后续逐位处理后更新
    nums = list(args)
    # 只要还有未处理完的数字,或者还有进位,就继续循环处理高位
    while nums or carry:
        tot = carry
        # 遍历所有数字,取当前最低位相加
        for i in range(len(nums)):
            if nums[i] > 0:
                tot += nums[i] % base
                # 去掉已经处理过的最低位,保留高位
                nums[i] = nums[i] // base
        # 计算当前位值和新的进位
        carry = tot // base
        current_digit = tot % base
        s = str(current_digit) + s
        # 移除已经处理完所有位的数字,减少后续循环的计算量
        nums = [num for num in nums if num > 0]
    return s

# 测试用例:四个二进制数相加
print(sum_base(2, 1111,1111,11111,10111))
# 输出结果:111110
验证说明

测试用例对应的数值计算:二进制的1111、1111、11111、10111分别对应十进制的15、15、31、23,求和结果为84,84转二进制结果为111110,和代码输出完全一致。该实现支持2~10范围内任意进制的多数字求和需求,逐位计算的逻辑也避免了先转十进制再转目标进制的大数溢出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:51:03