我试图在一个python函数中将一个十进制数变成三进制。我的想法是不断除法直到商和余数相等,但我似乎无法做到这一点。下面是我的代码:
l = 1
#problem code
def ternary(n):
e = n/3
q = n%3
e= n/3
q= e%3
print q
r = input("What number should I convert?: ")
k = bin(r)
v = hex(r)
i = oct(r)
print k+"(Binary)"
print v+"(Hex)"
print i+"(Octals)"
ternary(r)
l+=1
# Variables:
#l,r,k,v,i
#n,q,e
4条答案
按热度按时间qlfbtfca1#
我的想法是继续除法直到商和余数相等,但我似乎不能让它工作。
是的,差不多是这样。本质上,你想继续除以3,然后收集余数。余数然后组成最终的数字。在Python中,你可以使用
divmod
来除法和收集余数。示例:
qc6wkl3g2#
你也可以使用NumPy的实现:https://numpy.org/doc/stable/reference/generated/numpy.base_repr.html?highlight=base_repr#numpy.base_repr
不过,我同意专门用于三进制的函数更快。
w3nuxt5m3#
这也可以通过递归来实现。
更一般地说,您可以使用以下递归函数转换为任何基
b
(其中2<=b<=10
)。enxuqcxy4#
下面是一个非递归的解决方案。它返回一个小端整数数组,并且适用于任何自然数值和任何自然数基数≥2。
最后一个
if
语句可以省略,如果你不介意偶尔的零填充答案,如[0,1,0,0,0]。下面是它的用法示例:
以下是它的逆:
下面是对其行为的测试: