Перевод из любой системы счисления в любую [закрыт]
Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.
Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.
Закрыт 7 лет назад .
Очень нужен рабочий код на Python, который переводит любое число из любой системы счисления в другую заданную (любую) систему счисления. (от 0 по 32 может быть и исходная с/с, и полученная) Формат ввода: Число (Например: AA16342F) Изначальная система счисления (16) Система счисления, в которую переводим (8) Вывод полученного числа (25205432057)
Отслеживать
149k 12 12 золотых знаков 59 59 серебряных знаков 132 132 бронзовых знака
задан 25 дек 2016 в 20:14
79 1 1 золотой знак 1 1 серебряный знак 5 5 бронзовых знаков
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
def convert_base(num, to_base=10, from_base=10): # first convert to decimal number if isinstance(num, str): n = int(num, from_base) else: n = int(num) # now convert decimal to 'to_base' base alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" if n < to_base: return alphabet[n] else: return convert_base(n // to_base, to_base) + alphabet[n % to_base]
In [41]: convert_base('AA16342F', from_base=16, to_base=8) Out[41]: '25205432057' In [42]: convert_base('111', from_base=2) Out[42]: '7' In [43]: convert_base(33, to_base=16) Out[43]: '21' In [44]: convert_base(33333, to_base=20) Out[44]: '436D' In [45]: convert_base(3333333, to_base=20) Out[45]: '10GD6D'
UPD: нерекурсивная реализация функции:
def convert_base(num, to_base=10, from_base=10): # first convert to decimal number n = int(num, from_base) if isinstance(num, str) else num # now convert decimal to 'to_base' base alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" res = "" while n > 0: n,m = divmod(n, to_base) res += alphabet[m] return res[::-1]
Перевод из десятичной системы счисления в двоичную
Заметим, что в языке Python есть встроенная функция bin , которая переводит десятичное число в двоичную систему счисления.
>>> bin(5) '0b101' >>> bin(10) '0b1010'
Здесь же рассматривается алгоритм такого перевода и его реализация на Python.
Обычно десятичное число преобразуют к двоичному представлению путем нахождения остатков от деления на 2. При этом полученное на предыдущем шаге частное выступает в качестве делимого на следующем шаге. Деление заканчивается, когда делимое обращается в ноль. Остатки собираются в двоичное число начиная с конца, то есть последний остаток будет первой цифрой двоичного числа. Например, надо перевести число 8 в двоичную систему:
- 8 / 2 = 4, остаток 0
- 4 / 2 = 2, остаток 0
- 2 / 2 = 1, остаток 0
- 1 / 2 = 0, остаток 1
- 0 - конец деления
- Сборка: 10002
При реализации данного алгоритма с помощью языка программирования надо организовать хранение остатков. Сделать это можно в переменной строкового типа или в списке. В случае строки каждый новый остаток следует добавлять в начало.
n = int(input()) b = '' while n > 0: b = str(n % 2) + b n = n // 2 print(b)
8 1000
Пример решения задачи с использованием списка и без преобразования цифр двоичного числа в строковый тип:
n = int(input()) b = [] while n > 0: b.append(n % 2) n //= 2 b.reverse() for i in b: print(i, end='') print()
Метод reverse списка изменяет последовательность элементов на обратную.
X Скрыть Наверх
Решение задач на Python
Перевод десятичного числа в любую систему счисления
Написать программу, которая переводит десятичное число в любую другую систему счисления. Число и основание новой системы счисления вводятся с клавиатуры. При желании реализовать в программе функцию такого преобразования.
Решение задачи на языке программирования Python
Алгоритм перевода десятичного числа в любую другую систему счисления заключается в последовательном целочисленном делении сначала самого десятичного числа, а потом получаемых частных на основание системы счисления, в которую переводится число. Из остатков такого деления собирается представление числа в новой системе счисления. В той, на основание которой происходило деление. Сбор остатков происходит с конца.
Например, перевод десятичных чисел 160 в восьмеричную и 18 в двоичную системы счисления будет выглядеть так:
160 / 8 = 20 | 0 20 / 8 = 2 | 4 2 / 8 = 0 | 2
16010 = 2408
18 / 2 = 9 | 0 9 / 2 = 4 | 1 4 / 2 = 2 | 0 2 / 2 = 1 | 0 1 / 2 = 0 | 1
1810 = 100102
Даже если использовать этот алгоритм для перевода десятичного числа в десятичную систему счисления будет получен верный результат.
150 // 10 = 15 | 0 15 // 10 = 1 | 5 1 // 10 = 0 | 1
15010 = 15010
Проблема появляется в тот момент, когда основание системы счисления начинает превышать 10. В таких случаях нам не хватает привычных символов цифр (0-9) и требуется ввод дополнительных символов для обозначения значений, соответствующих десятичным числам 10, 11, 12 и т. д. Для примера переведем десятичное число в шестнадцатеричную систему счисления:
700 // 16 = 43 | 12 (C) 43 // 16 = 2 | 11 (B) 2 // 16 = 0 | 2
70010 = 2BC16
Десятичные остатки 12 и 11 при формировании шестнадцатеричного числа должны быть представлены одним разрядом. В таких случаях в качестве цифр, чье значение больше 9-ти, используются английские буквы. Так числу 10 будет соответствовать символ A , числу 11 - B и т. д.
Таким образом, при написании программы перевода десятичного числа в любую систему счисления мы должны предусмотреть подмену остатков на соответствующие им символы, если эта замена требуется.
Будем усложнять программу поэтапно и сначала напишем вариант кода, который переводит не в любую систему счисления, а только с основанием до 10-ти.
num = int(input()) base = 0 while not (2 base 9): base = int(input("Основание (2-9): ")) new = '' while num > 0: remainder = num % base new = str(remainder) + new num = num // base print(new)
В цикле сначала вычисляется остаток. Далее присоединям его спереди к строковой переменной new , в которой хранится представление числа в новой системе счисления. Последним действием присваиваем переменной num частное от целочисленного деления прежнего значения num на основание системы счисления.
Поскольку в языке программирования Python есть функция divmod , сократим код, объединив нахождение остатка и целочисленное деление:
. while num > 0: num, remainder = divmod(num, base) new = str(remainder) + new .
Вызов divmod(num, base) возвращает кортеж из частного и остатка от деления num на base . Далее частное присваивается num , остаток - remainder .
Теперь напишем программу, которая переводит число исключительно в шестнадцатеричную систему счисления. Для хранения символов, которыми будут заменяться двузначные остатки, используем строку из этих символов.
num = int(input()) base = 16 letters = 'ABCDEF' new = '' while num > 0: num, remainder = divmod(num, base) if remainder > 9: letter_id = remainder - 10 remainder = letters[letter_id] new = str(remainder) + new print(new)
Числу 10 соответствует символ A . Поэтому если остаток равен десяти, то letter_id будет равно нулю. Символ под индексом 0 в строке букв - как раз A . Если остаток равен 15-ти, то letter_id будет равно пяти, а letters[5] вернет F .
Программу можно упростить, если в строку символов добавить цифры. В этом случае остатки будут точно соответствовать индексам, под которыми находятся соответствующие им символы.
num = int(input()) base = 16 letters = '0123456789ABCDEF' new = '' while num > 0: num, remainder = divmod(num, base) new = letters[remainder] + new print(new)
На этом этапе должно стать понятно, как написать программу конвертации десятичного числа в почти любую систему счисления. Достаточно немного подправить код перевода в шестнадцатеричную систему, дописав в строку дополнительный набор символов, а не заканчивать ее на F .
Чтобы не хранить в программе строку большой длины и избежать ошибки из-за нечаянно пропущенного какого-нибудь символа, вернемся к варианту, в котором остатки больше девяти заменяются в теле условного оператора. При этом буквы будем брать не из определенной в коде строки, а из встроенной таблицы символов.
num = int(input()) base = 0 while not (2 base 36): base = int(input("Основание (2-36): ")) new = '' while num > 0: num, remainder = divmod(num, base) if remainder > 9: letter = remainder - 10 remainder = chr(ord('A') + letter) new = str(remainder) + new print(new)
Вызов ord('A') возвращает код буквы A в таблице Unicode. К этому коду-числу мы прибавляем смещение по алфавиту (значение letter ). С помощью функции chr() получаем соответстующую коду букву.
def convert_integer(decimal, radix): if radix > 36: return "Основание системы счисления должно быть не больше 36-ти" number = '' while decimal > 0: decimal, remainder = divmod(decimal, radix) if remainder > 9: remainder = chr(ord('A') + remainder - 10) number = str(remainder) + number return number num = int(input("Десятичное число: ")) base = int(input("Основание (2-36): ")) print(convert_integer(num, base))
Ограничение по основанию в 36 связано с количеством букв в английском алфавите. Их 26, плюс десять цифр. Расширить диапазон оснований можно за счет взятия недостающих символов из какой-либо другой части таблицы Unicode. Например, можно добавить к условному оператору ветку elif с условием remainder > 35 , а в теле вычитать из remainder 36.
Однако написать программу, которая переводит десятичное число в абсолютно любую систему счисления нельзя. Иначе надо суметь решить задачу генерации случайного символа, который не должен быть похож ни на какой из полученных ранее.
X Скрыть Наверх
Решение задач на Python
Перевод из десятичной в любую систему счисления

Добрый день, такой код для перевода в десятичную из любой системы счисления:
int(str(decimal_number), 2)
Где 2 - основание, из которого переводим.
Мой вопрос в следующем - существует ли лёгкий способ/стандартная!! библиотека, для перевода из десятичной в любую систему счисления?
Лучшие ответы ( 2 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Перевод из любой системы счисления в любую систему счисления
Понадобился значит код на питоне, который переводит из любой системы счисления в любую систему.
Перевод из десятичной в двоичную систему счисления
Написать функцию scalenotation, принимающую 1 аргумент —число в 10-ой системе счисления, и.
Перевод исходного массива в любую систему счисления от двоичной до девятеричной
Задан массив F из вещественных чисел в десятичной системе счисления. В другом массиве организовать.
Перевод дробной части числа из десятичной системы счисления в любую другую систему счисления
Здравствуйте как перевести дробной части числа из десятичной системы счисления в любую другую.
Перевод числа из десятичной в любую систему счисления
Задача "Написать рекурсивную программу перевода целых чисел, не превосходящих ^, из.
70 / 47 / 16
Регистрация: 21.07.2021
Сообщений: 185
Есть стандартные системы счисления - bin(), hex(), oct()
Но если вам и этого мало, можно поискать библиотеки для pip'а, уверен, такие тоже найдутся, хотя задача на несколько строк.
Простота-залог надежности
22 / 13 / 10
Регистрация: 15.09.2019
Сообщений: 187
Сообщение от kernel_mode 
уверен, такие тоже найдутся
Не поверите, в этом и есть мой вопрос.
3553 / 2156 / 568
Регистрация: 02.09.2015
Сообщений: 5,441
SouthBoss, gmpy2.
![]()
![]()
36000 / 20115 / 4197
Регистрация: 12.02.2012
Сообщений: 33,307
Записей в блоге: 13

Сообщение было отмечено SouthBoss как решение
Решение
Сообщение от SouthBoss 
существует ли лёгкий способ/стандартная!! библиотека
1 2 3 4 5 6 7 8 9 10 11 12 13 14
def conv(n,radix): digits="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" r="" while(n>0): k=n%radix # очередная цифра r=digits[k]+r # приклеим к результату n=n//radix return r n=int(input("n=")) x8=conv(n,8) x20=conv(n,20) print("в 8-й СС",x8) print("в 20-й СС",x20)
Переведет исходное число в любую систему с основанием 2-36
n=1234 в 8-й СС 2322 в 20-й СС 31E
Регистрация: 08.10.2020
Сообщений: 148
Catstail, а вы не знаете где можно найти такое же решение,только для вещественных чисел?
![]()
![]()
36000 / 20115 / 4197
Регистрация: 12.02.2012
Сообщений: 33,307
Записей в блоге: 13

Сообщение было отмечено SouthBoss как решение
Решение
Сообщение от Artue 
где можно найти такое же решение,только для вещественных чисел?
- где найти - не знаю, но его легко написaть:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
def convi(n,radix): digits="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" if n==0: return "0" r="" while(n>0): k=n%radix # очередная цифра r=digits[k]+r # приклеим к результату n=n//radix return r def convf(a,radix,fsize): digits="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" c="" f="" ca=int(a) fa=a-int(a) c=convi(ca,radix) for _ in range(fsize): fa=fa*radix cf=int(fa) fa=fa-cf f=f+digits[cf] return c+"."+f print(convf(3.14159,3,13))
fsize - к-во цифр дробной части
Простота-залог надежности
22 / 13 / 10
Регистрация: 15.09.2019
Сообщений: 187
Catstail, добрый вечер! рад сообщить, что Ваш метод прекрасно работал всё это время, пока вчера я не столкнулся с задачкой, где нужно было перевести число в 49-чную СС. Прекрасно понимаю, что она решается аналитически, но если говорить о программном методе, такое возможно?
![]()
![]()
36000 / 20115 / 4197
Регистрация: 12.02.2012
Сообщений: 33,307
Записей в блоге: 13
Сообщение от SouthBoss 
где нужно было перевести число в 49-чную СС.
- и что? Вот - до основания 62. Устроит? Если нет - добавьте еще цифр.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
def convi(n,radix): digits="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrsuvwxyz" if n==0: return "0" r="" while(n>0): k=n%radix # очередная цифра r=digits[k]+r # приклеим к результату n=n//radix return r def convf(a,radix,fsize): digits="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrsuvwxyz" c="" f="" ca=int(a) fa=a-int(a) c=convi(ca,radix) for _ in range(fsize): fa=fa*radix cf=int(fa) fa=fa-cf f=f+digits[cf] return c+"."+f print(convf(3.14159,3,13))
![]()
![]()
36000 / 20115 / 4197
Регистрация: 12.02.2012
Сообщений: 33,307
Записей в блоге: 13
Только не увлекайтесь большим количеством цифр в дробной части. Исходите из того, что число типа double (в Питоне - float) хранится в памяти в 8 байтах, что соответствует ~ 15-16 десятичным значащим цифрам. Это означает, что, к примеру, в сс с основанием 36, общее к-во значащих цифр (целая+дробная часть) не должно превышать 10. А для сс с осн. 49 - девяти.
Регистрация: 24.09.2022
Сообщений: 1
вот вроде так, если коротко, переволид из 10 сист счисления в любую:
1 2 3 4 5 6 7 8 9 10 11 12
def perevod(a, b): ishod = '' while a > 0: ishod = str(a % b) + ishod a = a // b print(ishod) v = input().split() d1 = int(v[0]) d2 = int(v[1]) perevod(d1, d2)
Всем добра!
![]()
![]()
36000 / 20115 / 4197
Регистрация: 12.02.2012
Сообщений: 33,307
Записей в блоге: 13
zah666, что за фигня?
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Перевод из любой системы счисления в любую другую систему счисления (2-36)
Привет. 1 курс факультета ИВТ, изучаю С++ только один месяц. Из основного прошли строки, массивы.
Программа для перевода из десятичной сс в любую другую систему счисления
Создать программу перевода заданного числа в десятичной системе счисления в любую другую. Исходные.
Перевод из десятичной системы счисления в любую другую
Здравствуйте. Мне нужно на Делфи написать код перевода из десятиричной системы счисления в любую.
Перевести заданное пользователем в десятичной системе число в любую систему счисления
Нужна помощь (решение). Заранее благодарен. перевести заданное пользователем в десятичной системе.

Перевод числа из десятичной системы счисления в любую другую
написать программу переводящую число из десятичной системы счисления в любую систему счисления
Перевод чисел из десятичной системы счисления в любую другую
Считать с клавиатуры целое неотрицательное число в десятичной системе счисления и основание новой.
Или воспользуйтесь поиском по форуму: