我的想法是继续划分,直到商和余数相等,但我似乎无法让它工作.
是的,类似的东西.基本上,你想要继续除以3,并收集余数.然后剩余部分构成最终数字.在Python中,您可以使用divmod
分割和收集余数.
def ternary (n): if n == 0: return '0' nums = [] while n: n, r = divmod(n, 3) nums.append(str(r)) return ''.join(reversed(nums))
例子:
>>> ternary(0) '0' >>> ternary(1) '1' >>> ternary(2) '2' >>> ternary(3) '10' >>> ternary(12) '110' >>> ternary(22) '211'
这也可以通过递归来完成.
def ternary(n): e = n//3 q = n%3 if n == 0: return '0' elif e == 0: return str(q) else: return ternary(e) + str(q)
更一般地说,您可以使用以下递归函数转换为任何基b
(where 2<=b<=10
).
def baseb(n, b): e = n//b q = n%b if n == 0: return '0' elif e == 0: return str(q) else: return baseb(e, b) + str(q)