对于两个基数为 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/