Python

Помогите с системами счисления в Python

Помогите пожалуйста с алгоритмом для перевода из 2й в 3ную систему счисления, понять не могу :)
прикол в том, что "перевод в N-ичную систему счисления" - это на самом деле получение строки-записи числа в этой N-ичной системе счисления.
то есть, у тебя есть число X, и тебе надо получить его вид в N-ичной системе счисления.

если присмотреться к записи числа в некой с. с., то выяснится, что она - рекурсивная.
например, число 45673 в десятичной системе счисления представимо в виде:
45673 = 4567 * 10 + 3
далее:
4567 = 456 * 10 + 7
456 = 45 * 10 + 6
45 = 4 * 10 + 5
4 = 0 * 10 + 4
0 - алгоритм закончен
то есть, цифры числа - это остатки от последовательного деления его на 10

это же справедливо для записи числа в любой системе счисления.
например, число в двоичной системе счисления:
1011 = 101 * 10 + 1
101 = 10 * 10 + 1
10 = 1 * 10 + 0
1 = 0 * 10 + 1
0 - алгоритм закончен
(здесь 10 - это двоичная запись числа 2)

получаем простой алгоритм:

# задаём множество цифр, т. е., единичных символов для записи чисел
digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
# здесь каждый символ соответствует числу - позиции символа в строке
# т. е., число 0 => позиция в строке соответствует символу "0"
# т. е., число 19 => позиция в строке соответствует символу "J"

# запихиваем число X в компьютер,
# написав его в тексте программы, например,
# в привычной 10-ичной системе счисления
X = 45673

# задаём число N - основание системы счисления,
# в которой хотим получить результат
N = 3

# подготавливаем строку для хранения результата,
# т. е., записи числа в N-ичной системе счисления
S = ""

# получаем запись числа в N-ичной системе счисления:
while (X):
# получаем правую цифру числа
d = X % N
# переносим символ соответствующей цифры в ответ
S = digits[d] + S
# вычисляем "хвост" числа для продолжения алгоритма
X = X // N

# выводим результат на экран:
print(S)

если же у нас есть некая строка символов, и надо её перегнать в число, то "разворачиваем" алгоритм - и вуаля:

# задаём запись числа в N-ичной системе счисления
S = "2022122121"
# задаём основание системы счисления
N = 3

# готовим переменную под число-результат
X = 0

# пока строка не кончится, откусываем от неё по символу слева
# и прибавляем соответствующую цифру к результату
while (S):
X = X * N + digits.index(S[0])
S = S[1:]

# выводим результат на экран:
print(X)
НР
Никита Рауге
99 839
Лучший ответ
Переведи в десятичную. А из неё - в троичную. Что сложного?
Павел Дмитриев
Павел Дмитриев
79 413
Айбек Алмазбек Уулу Я алгоритм не понимаю :) Можете написать пожалуйста пример как это работает хоть пойму)
def n10_s3(n10):
~~~~if n10<0:
~~~~~~~~return 'Error. Only n>=0'
~~~~if n10==0:
~~~~~~~~return '0'
~~~~s3 = ''
~~~~while n10<-1 or 0<n10:
~~~~~~~~~~~~s3+=str(n10%3)
~~~~~~~~~~~~n10//=3
~~~~return s3[::-1]

for i in range(12):
~~~~print(i, n10_s3(i))

n2 = '0b11010010011'
print(n2, n10_s3(int(n2,2)), int(n2,2))

print(n10_s3(-13))