Главная страница » Как перевести в троичную систему счисления в python

Как перевести в троичную систему счисления в python

Чтобы перевести число из десятичной системы счисления в троичную (основание 3) в Python, вы можете использовать итеративный алгоритм деления на 3 с записью остатков.

Вот как это можно реализовать:

Python

Def to_ternary(n):
 """
 Переводит целое неотрицательное число из десятичной системы в троичную.
 
 Аргументы:
 n (int): Десятичное число (должно быть неотрицательным).
 
 Возвращает:
 str: Строковое представление числа в троичной системе счисления.
 Возвращает "0", если n равно 0.
 """
 if n == 0:
 return "0"
 
 ternary_digits = []
 while n > 0:
 remainder = n % 3 # Получаем остаток от деления на 3
 ternary_digits. append(str(remainder)) # Добавляем остаток в список
 n //= 3 # Целочисленное деление на 3
 
 # Цифры собираются в обратном порядке, поэтому разворачиваем список
 return "".join(ternary_digits[::-1])
 
# --- Примеры использования ---
Print(f"Десятичное 0 в троичной: {to_ternary(0)}") # Ожидаем 0
Print(f"Десятичное 1 в троичной: {to_ternary(1)}") # Ожидаем 1
Print(f"Десятичное 2 в троичной: {to_ternary(2)}") # Ожидаем 2
Print(f"Десятичное 3 в троичной: {to_ternary(3)}") # Ожидаем 10 (3 = 1*3^1 + 0*3^0)
Print(f"Десятичное 4 в троичной: {to_ternary(4)}") # Ожидаем 11 (4 = 1*3^1 + 1*3^0)
Print(f"Десятичное 5 в троичной: {to_ternary(5)}") # Ожидаем 12 (5 = 1*3^1 + 2*3^0)
Print(f"Десятичное 6 в троичной: {to_ternary(6)}") # Ожидаем 20 (6 = 2*3^1 + 0*3^0)
Print(f"Десятичное 7 в троичной: {to_ternary(7)}") # Ожидаем 21 (7 = 2*3^1 + 1*3^0)
Print(f"Десятичное 8 в троичной: {to_ternary(8)}") # Ожидаем 22 (8 = 2*3^1 + 2*3^0)
Print(f"Десятичное 9 в троичной: {to_ternary(9)}") # Ожидаем 100 (9 = 1*3^2 + 0*3^1 + 0*3^0)
Print(f"Десятичное 10 в троичной: {to_ternary(10)}") # Ожидаем 101
Print(f"Десятичное 13 в троичной: {to_ternary(13)}") # Ожидаем 111 (13 = 1*9 + 1*3 + 1*1)
Print(f"Десятичное 27 в троичной: {to_ternary(27)}") # Ожидаем 1000
Print(f"Десятичное 80 в троичной: {to_ternary(80)}") # Ожидаем 2222 (80 = 2*27 + 2*9 + 2*3 + 2*1)
 
# Обработка отрицательных чисел (если требуется)
# Обычно троичная система рассматривается для неотрицательных чисел.
# Для отрицательных чисел можно просто добавить минус перед результатом.
Def to_ternary_signed(n):
 if n == 0:
 return "0"
 if n < 0:
 return "-" + to_ternary(abs(n))
 return to_ternary(n)
 
Print(f"Десятичное -10 в троичной: {to_ternary_signed(-10)}") # Ожидаем -101

Объяснение алгоритма:

Этот алгоритм основан на принципе перевода чисел из одной системы счисления в другую путем повторного деления на новое основание и сбора остатков:

Начните с числа N. Делите N на 3. Запишите Остаток. Этот остаток будет крайней правой цифрой (младшим разрядом) троичного числа. Возьмите Целую часть от деления и повторите шаг 2 с этой новой целой частью. Продолжайте этот процесс, пока целая часть не станет равной 0. Соберите все остатки, но В обратном порядке. Это и будет ваше число в троичной системе.

Пример для N = 10:

10 / 3 = 3 (остаток 1) 3 / 3 = 1 (остаток 0) 1 / 3 = 0 (остаток 1)

Остатки, собранные в обратном порядке: 1, 0, 1 -> 101. Итак, 10 в десятичной системе равно 101 в троичной системе.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх