Skip to content Skip to sidebar Skip to footer

Convert Decimal To Ternary(base3) In Python

I am trying to make a decimal number ternary in a python function. My idea was to keep dividing until the quotient and remainder were equal, but I can't seem to get that to work. H

Solution 1:

My idea was to keep dividing until the quotient and remainder were equal, but I can't seem to get that to work.

Yeah, something like that. Essentially, you want to keep dividing by 3, and collect the remainders. The remainders then make up the final number. In Python, you can use divmod to divide and collect the remainder.

defternary (n):
    if n == 0:
        return'0'
    nums = []
    while n:
        n, r = divmod(n, 3)
        nums.append(str(r))
    return''.join(reversed(nums))

Examples:

>>> ternary(0)
'0'>>> ternary(1)
'1'>>> ternary(2)
'2'>>> ternary(3)
'10'>>> ternary(12)
'110'>>> ternary(22)
'211'

Solution 2:

You can also use the implementation of NumPy: https://numpy.org/doc/stable/reference/generated/numpy.base_repr.html?highlight=base_repr#numpy.base_repr

Though, I agree that a function for ternary exclusively is faster.

import numpy as np

number=100# decimal
ternary=np.base_repr(number,base=3)
print(ternary)
#10201

Solution 3:

This can also be done with recursion.

defternary(n):
    e = n//3
    q = n%3if n == 0:
        return'0'elif e == 0:
        returnstr(q)
    else:
        return ternary(e) + str(q)

More generally, you can convert to any base b (where 2<=b<=10) with the following recursive function.

defbaseb(n, b):
    e = n//b
    q = n%b
    if n == 0:
        return'0'elif e == 0:
        returnstr(q)
    else:
        return baseb(e, b) + str(q)

Post a Comment for "Convert Decimal To Ternary(base3) In Python"