Как перевести число в любую систему счисления python
Перейти к содержимому

Как перевести число в любую систему счисления 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
Сообщений: 185

ЦитатаСообщение от kernel_mode Посмотреть сообщение

уверен, такие тоже найдутся
Не поверите, в этом и есть мой вопрос.
3850 / 2138 / 566
Регистрация: 02.09.2015
Сообщений: 5,425
SouthBoss, gmpy2.

Эксперт функциональных языков программированияЭксперт Python

36833 / 19881 / 4166
Регистрация: 12.02.2012
Сообщений: 33,015
Записей в блоге: 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, а вы не знаете где можно найти такое же решение,только для вещественных чисел?

Эксперт функциональных языков программированияЭксперт Python

36833 / 19881 / 4166
Регистрация: 12.02.2012
Сообщений: 33,015
Записей в блоге: 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
Сообщений: 185

Catstail, добрый вечер! рад сообщить, что Ваш метод прекрасно работал всё это время, пока вчера я не столкнулся с задачкой, где нужно было перевести число в 49-чную СС. Прекрасно понимаю, что она решается аналитически, но если говорить о программном методе, такое возможно?

Эксперт функциональных языков программированияЭксперт Python

36833 / 19881 / 4166
Регистрация: 12.02.2012
Сообщений: 33,015
Записей в блоге: 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))

Эксперт функциональных языков программированияЭксперт Python

36833 / 19881 / 4166
Регистрация: 12.02.2012
Сообщений: 33,015
Записей в блоге: 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)

Всем добра!

Эксперт функциональных языков программированияЭксперт Python

36833 / 19881 / 4166
Регистрация: 12.02.2012
Сообщений: 33,015
Записей в блоге: 13
zah666, что за фигня?
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

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

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

Перевод из десятичной системы счисления в любую другую
Здравствуйте. Мне нужно на Делфи написать код перевода из десятиричной системы счисления в любую.

Перевести заданное пользователем в десятичной системе число в любую систему счисления
Нужна помощь (решение). Заранее благодарен. перевести заданное пользователем в десятичной системе.

Перевод числа из десятичной системы счисления в любую другую
написать программу переводящую число из десятичной системы счисления в любую систему счисления

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

Урок 32. Перевод чисел между системами счисления

При программировании мы часто сталкиваемся с необходимостью перевода чисел между системами счисления, по основанию: 2, 4, 8, 16 и 10.

Основание системы счисления указывает какое количество цифр используется в этой системе для написания чисел:

  • Привычная нам система счисления по основанию 10 (десятичная система счисления) использует 10 цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. После 9 идёт не цифра, а число 10, состоящее из двух цифр: 1 и 0. Таким образом, мы записываем любые числа, используя указанные цифры в определённой последовательности.
  • Система счисления по основанию 2 (двоичная система счисления) использует 2 цифры: 0, 1.
  • Система счисления по основанию 4 (четверичная система счисления) использует 4 цифры: 0, 1, 2, 3.
  • Система счисления по основанию 8 (восьмеричная система счисления) использует 8 цифр: 0, 1, 2, 3, 4, 5, 6, 7.
  • Система счисления по основанию 16 (шестнадцатеричная система счисления) использует 16 цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. В данном случае, буквы ABCDEF являются цифрами. Цифра A шестнадцатеричной системы, равна числу 10 десятичной системы, цифра B равна числу 11 десятичной системы, . , цифра F равна числу 15 десятичной системы.

Можно использовать любую систему счисления, например по основанию 12 (счет дюжинами), но наиболее популярными при программировании, являются: десятичная, шестнадцатеричная и двоичная, системы счисления.

Все выше перечисленные системы счисления относятся к позиционным системам. Значение числа зависит не только от того из каких цифр оно состоит, но и в какой последовательности они записаны. Например число 1234 не равно числу 4321.

Методы представления чисел в разных системах счисления:

  • двоичная система счисления:
    • (10101)2 — математическое представление (число)основание системы
    • 0b10101 — представление в скетчах Arduino IDE (число записывается с ведущими символами «0b»).
    • B10101 — представление в скетчах Arduino IDE (число до 256 записывается с ведущим символом «B»).
    • (10101)8 — математическое представление (число)основание системы
    • 010101 — представление в скетчах Arduino IDE (число записывается с ведущим символом «0» ноль).
    • (10101)10 — математическое представление (число)основание системы
    • 10101 — представление в скетчах Arduino IDE (число записывается как есть без ведущих символов)
    • (10101)16 — математическое представление (число)основание системы
    • 0x10101 — представление в скетчах Arduino IDE (число записывается с ведущими символами «0x»).
    Перевод чисел в десятичную систему счисления:

    Для перевода числа из любой системы счисления в десятичную нужно сложить все цифры этого числа, предварительно умножив каждое из них на основание системы счисления, из которой производится перевод, возведя её в степень соответствующую позиции цифры в числе:

    Σ(цифра_числа * основание_системы позиция_цифры )

    Примеры перевода чисел в десятичную систему счисления:

    Перевод чисел из десятичной системы счисления:

    Для перевода чисел из десятичной системы счисления в любую другую, необходимо целочисленно делить переводимое число на основание той системы, в которую мы хотим его перевести, до тех пор пока результат целочисленного деления не станет равен 0. Результатом перевода будут цифры остатка от каждого деления, в обратном порядке.

    Примеры перевода чисел из десятичной системы счисления:

    • (43)10 перевести в двоичную систему счисления:
      • 43/2 = 21 и 1 в остатке
      • 21/2 = 10 и 1 в остатке
      • 10/2 = 5 и 0 в остатке
      • 5/2 = 2 и 1 в остатке
      • 2/2 = 1 и 0 в остатке
      • 1/2 = 0 и 1 в остатке
      • результат — цифры остатков в обратном порядке = (101011)2
      • 751/8 = 93 и 7 в остатке
      • 93/8 = 11 и 5 в остатке
      • 11/8 = 1 и 3 в остатке
      • 1/8 = 0 и 1 в остатке
      • результат — цифры остатков в обратном порядке = (1357)8
      • 15305/16 = 956 и 9 в остатке
      • 956/16 = 59 и 12 в остатке — соответствует цифре (C)16
      • 59/16 = 3 и 11 в остатке — соответствует цифре (B)16
      • 3/16 = 0 и 3 в остатке
      • результат — цифры остатков в обратном порядке = (3BC9)16
      Простой метод перевода:

      Легче всего переводить числа через двоичную систему счисления. О том как это сделать рассказано в нашем видеоуроке.

      Перевод из любой системы счисления в любую [закрыт]

      Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.

      Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.

      Закрыт 6 лет назад .

      Очень нужен рабочий код на 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

      Алгоритм перевода десятичного числа в любую другую систему счисления заключается в последовательном целочисленном делении сначала самого десятичного числа, а потом получаемых частных на основание системы счисления, в которую переводится число. Из остатков такого деления собирается представление числа в новой системе счисления. В той, на основание которой происходило деление. Сбор остатков происходит с конца.

      Например, перевод десятичных чисел 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

Добавить комментарий

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