python - 减去 2 到 10 之间任何基数的两个数

标签 python

对于两个基数为 b 的数字 x 和 y,这对减去它们有效吗?数字以字符串格式给出,2 <= b <= 10。

def n2b(n, b):         # function to convert number n from base 10 to base b
    if n == 0:
        return 0
    d = []
    while n:
        d.append(int(n % b))
        n /= b
    return ''.join(map(str,d[::-1]))

x = int(x,b) # convert to integers in base 10 
y = int(y,b)
z = x - y
z = n2b(z,b) # convert back to base b, still in integer form

最佳答案

您对整数在 Python 中的工作方式有些困惑。正如上面的评论所说:python 总是以二进制形式存储整数,并且只在打印时将它们转换为基数。根据您获得 x 和 y 的方式以及您需要返回 z 的方式,代码需要有所不同

情况一:x,y,z均为整数

在这种情况下你只需要做

z = x - y

你就完成了。

情况2:x,y,z都是字符串

在这种情况下,您首先需要将字符串转换为具有正确基数的整数。我认为这就是你的情况,因为你已经处理了 int(x, b) 将字符串转换为整数的正确方法(例如 int("11", 2) 给出 3(以 10 为基数表示的整数)。我建议您将代码改造成如下形式:

x_int = int(x, b)
y_int = int(y, b)
z_str = n2b(x_int - y_int, b)

在您的代码中,x 首先是一个字符串,然后是一个整数,这是不好的做法。所以例如使用 x_int 而不是 x

现在归结为您的 n2b 函数是否正确。从远处看它看起来不错,虽然你没有处理大于 10 的标志和基地。有一个被广泛接受的 convert integer to base b answer所以您可以确定这一点。

关于python - 减去 2 到 10 之间任何基数的两个数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41647701/

相关文章:

python - 当我单击按钮时,打开新表格并写一些东西

python /Django : How to detect and avoid import name conflict?

python - 在 NumPy 中跟踪多索引和修改值

python - 如何合并 Jupyter 笔记本中的更改

python - 如何在基类方法中使用派生类变量

python - 检查列表中的多个值

python - 如何从 .csv 文件中删除行

python - 将用户代理实现到 urllib.request.build_opener 的正确方法

python - 名称 'ImageDataBunch' 未定义

python - 遍历 pandas 中的行并计算唯一的主题标签