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

Python中无需转十进制的任意进制整数乘法实现方案问询

Python中无需转十进制的任意进制整数乘法实现

Python标准库没有专门提供直接处理任意进制整数乘法且不转换为十进制的工具,但可以通过模拟竖式乘法的方式高效实现,完全规避十进制转换步骤。

核心思路

  1. 字符转数字列表:将输入的进制字符串(如"b5")转换为对应数值的列表(如[11, 5],其中b对应14进制的11),方便逐位计算。
  2. 竖式乘法累加:用其中一个数的每一位去乘另一个数的每一位,将结果累加到对应位置(类似小学竖式乘法的错位相加)。
  3. 处理进位:从低位到高位遍历,将每一位的数值对base取余得到当前位,商作为进位传递到高位。
  4. 数字转进制字符串:将处理后的数字列表转换回对应进制的字符形式(如11转回b)。

代码实现

def arbitrary_base_multiply(base: int, a: str, b: str) -> str:
    # 定义字符与数字的映射(支持0-9,a-z对应10-35,覆盖常见进制需求)
    char_to_num = {str(i): i for i in range(10)}
    char_to_num.update({chr(ord('a') + i): 10 + i for i in range(26)})
    num_to_char = {v: k for k, v in char_to_num.items()}

    # 将输入字符串转为数字列表(高位在前)
    num_a = [char_to_num[c.lower()] for c in a]
    num_b = [char_to_num[c.lower()] for c in b]

    # 初始化结果数组,长度为两个数的长度之和
    result = [0] * (len(num_a) + len(num_b))

    # 模拟竖式乘法,从低位到高位计算
    for i in reversed(range(len(num_a))):
        for j in reversed(range(len(num_b))):
            # 计算当前位的乘积,累加到对应位置
            product = num_a[i] * num_b[j]
            pos = i + j + 1
            result[pos] += product
            # 提前处理进位,避免后续数值过大
            result[pos - 1] += result[pos] // base
            result[pos] = result[pos] % base

    # 去除前导零
    while len(result) > 1 and result[0] == 0:
        result.pop(0)

    # 转换为进制字符串
    return ''.join([num_to_char[num] for num in result])

测试验证

针对题目中的例子:

print(arbitrary_base_multiply(14, "b5", "2a"))  # 输出: 22b8

对应十进制验证:159 * 38 = 6042,与int("22b8", 14)的结果一致,验证正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 17:12:04