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)
то есть, у тебя есть число 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)
Переведи в десятичную. А из неё - в троичную. Что сложного?
Айбек Алмазбек Уулу
Я алгоритм не понимаю :) Можете написать пожалуйста пример как это работает хоть пойму)
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))
~~~~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))
Похожие вопросы
- 2^1800+2^100−2^1200−32 - записали в системе счисления с основанием 2. Сколько цифр "1" содержится в этой записи?
- Помогите пожалуйста с задачей по python!
- Помогите пж с задачей по Python.
- Помогите пожалуйста с задачей на Python.
- Помогите исправить ошибку в коде. Python
- Помогите пожалуйста с задачей на Python.
- Помогите пожалуйста с задачей на Python
- Помогите пожалуйста с задачей по python!
- Помогите пожалуйста с задачей на python!
- Помогите пожалуйста с заданием на python