вы можете использовать принцип positional notation для перехода от одного или другого в любой базе
Treat Yours числа (n0, n1, ..., нм) в виде цифры большого числа в база B по вашему выбору, поэтому новый номер
N = n0*B^0 + n1*B^1 + ... + nm*B^m
, чтобы вернуть процесс, также прост, в то время как ваш номер больше 0, найдите его по модулю относительно базы, чтобы получить первую цифру, затем вычитает эту цифру и разделите ее на базу, повторите до конца, сохраняя каждая цифра по пути
digit_list = []
while N > 0 do:
d = N mod B
N = (N - d)/B
digit_list.append(d)
затем, если N является N = n0*B^0 + n1*B^1 + ... + nm*B^m
делать N mod B
дать вам n0, а затем вычесть его оставив вас с n1*B^1 + ... + nm*B^m
и разделите на B, чтобы уменьшить показатели всех B и является новым N, N = n1*B^0 + ... + nm*B^(m-1)
повторения из которого вы получите всю цифру, начинающуюся с
здесь рабочий пример в питоне
def compact_num(num_list, base=12):
return sum(n*pow(base,i) for i,n in enumerate(num_list))
def decompact_num(n, base=12):
if n==0:
return [0]
result = []
while n:
n,d = divmod(n,base)
result.append(d)
return result
пример
>>> compact_num([2,5,7])
1070
>>> decompact_num(1070)
[2, 5, 7]
>>> compact_num([10,2],16)
42
>>> decompact_num(42,16)
[10, 2]
>>>
Это выглядит подозрительно, как бессмысленное задание на домашнюю работу. Зачем вам это нужно? – Missy
Возможно, вам повезет больше на math.stackexchange.com – CoconutBandit
Я буду отвечать «Зачем вам это нужно?» Вы можете просто использовать базу 16, так как тогда она жестко закодирована практически в каждом языке программирования. И если это не связано с программированием, то это, вероятно, вне темы. – Teepeemm