Перевод в десятичную

Перевод числа в десятичную систему счисления из любой другой в python осуществляется с помощью функции int в которую в качестве первого аргумента передается строковое представление числа, которое нужно перевести, а в качестве второго аргумента - число соответствующее основанию системы счисления из которой происходит перевод.

print(int("245F",16)) #На экран будет напечатано 9311

Перевод из десятичной в любую другую

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

x=17 #Число, которое переводим
y=2 #Система счисления в которую переводим
res="" #Итоговый результат
while x>=y: #Пока число x не меньше чем основание системы
            #счисления y в которую происходит перевод
res=str(x%y)+res #Дописываем остаток от деления числа
#x на число y в начало итогового числа
x//=y #Целочисленно делим x на y и записываем
#результат в переменную x
res=str(x)+res #Дописываем текущее значение числа x в
#начало переменной res
print(res) #Выводим получившийся результат на экран

Т.к. остаток от деления меньшего числа на большее равен меньшему числу, а результат целочисленного деления меньшего числа на большее равен нулю, мы можем опустить последний шаг, исправив условие в цикле "while" на x>0.

x=17 #Число, которое переводим
y=2 #Система счисления в которую переводим
res="" #Итоговый результат
while x>0: #Пока число x больше нуля
    res=str(x%y)+res #Дописываем остаток от деления числа
                     #x на число y в начало итогового числа
    x//=y #Целочисленно делим x на y и записываем
          #результат в переменную x
print(res) #Выводим получившийся результат на экран

Код выше позволяет перевести в системы счисления только до десятичной. Довольно очевидно, что если мы получим в какой-то момент остаток больше 9, то мы вместо соответствующей буквы допишем двузначное число в переменную res. Чтобы этого избежать можно создать строку, где значение остатка от деления будет соответствовать индексу, а его представление в конкретной системе счисления - символу.

x=1765 #Число, которое переводим
y=19 #Система счисления в которую переводим
alph="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" #Строка, где индекс каждой цифры 
                                            #соответствует ее представлению в 
                                            #различных системах счисления
res="" #Итоговый результат
while x>0: #Пока число x больше нуля
    res=alph[x%y]+res #Дописываем цифру соответствующую остатку от деления
                      #числа x на число y в начало итогового числа
    x//=y #Целочисленно делим x на y и записываем
          #результат в переменную x
print(res) #Выводим получившийся результат на экран

Чаще всего мы будем работать с функцией перевода. Обернём алгоритм описанный выше в такую функцию.

def xtoy(x,y):
alph="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" res="" while x>0: res=alph[x%y]+res x//=y return res

Работа с системами счисления большими 36

Т.к. для систем счисления превышающих 36 нет общепринятых обозначений для цифр, то представить в виде конечного набора цифр число содержащее, например, цифру 40 мы не сможем. Если всё-таки возникает необходимость поработать с полной записью такого числа, то мы можем создать список, где каждый элемент будет представлять из себя искомую цифру.

x=1765 #Число, которое переводим
y=64 #Система счисления в которую переводим
res=[] #Итоговый результат
while x>0: #Пока число x больше нуля
    res.insert(0,x%y) #Добавляем остаток от деления
                      #числа x на число y в начало списка
    x//=y #Целочисленно делим x на y и записываем
          #результат в переменную x
print(res) #Выводим получившийся результат на экран

Ну и тогда обратный алгоритм будет выглядеть так.

numbers=[9,13,6,15] #Пусть есть число 9D6F16
res=0 #Переменная для суммирования результата
for i in range(len(numbers)): #Переберем все цифры, начиная со старшей
    pow=len(numbers)-i-1 #Посчитаем степень в которую возведем основание
    res+=numbers[i]*16**pow #Добавим в общую сумму очередной слагаемое
print(res) #Выводим получившийся результат на экран

Пример нахождения отдельных характеристик

Если же нас не интересует само число, а интересуют какие-то его отдельные характеристики (самые частые задачи - это количество или сумма определенных цифр), то переводить его целиком никакой надобности нет. Так, например, мы можем решить задачу нахождения суммы всех цифр кратных k.

x=1765 #Число, которое переводим
y=64 #Система счисления в которую переводим
k=5 #Значение которому должны быть кратны цифры
res=0 #Итоговый результат
while x>0: #Пока число x больше нуля
    c=x%y #Получаем очередную цифру числа x 
          #в системе счисления с основанием y
    if(c%k==0):#Если текущая цифра кратна k
        res+=x%y #То добавляем ее в общую сумму
    x//=y #Целочисленно делим x на y и записываем
          #результат в переменную x
print(res) #Выводим получившийся результат на экран

Аналогично можем ввести счетчик и искать количество цифр подходящих под некоторое условие.

Last modified: Friday, 5 December 2025, 11:56 PM