Курс 3.8 — Алгоритмы · Раздел 03 · Урок 3.2

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

Разберём перевод числа в десятичную систему с помощью цифр и их разрядных весов.

Разберём перевод числа в десятичную систему с помощью цифр и их разрядных весов.
3.2 — Перевод числа в десятичную систему счисления

Материал урока

Введи с клавиатуры два числа: p (1 < p < 11) и n, записанное в системе счисления с основанием p. Убедись, что число n записано без ошибок. Переведи n в десятичную систему и отобрази результат на экране.

Классический алгоритм для этой задачи выглядит так:

  1. Вес самого младшего разряда в любой позиционной системе счисления равен 1, поэтому перед началом работы установим текущий вес разряда равным единице, а итоговое число будем накапливать в итоговом результате
  2. Возьмём последнюю цифру заданного числа и умножим её на текущий вес
  3. Добавим результат умножения к итоговому результату
  4. Отбросим последнюю цифру числа от числа n, а текущий вес умножим на p
  5. Если n не ноль, повторим алгоритм с пункта № 2, в противном случае мы получили результат

Вот какой у нас получится код:

# Введём основание системы p и само число n
p = int(input("Введите основание системы счисления (p ≤ 10): "))
n = int(input("Введите число в этой системе: "))

result = 0  # здесь я буду накапливать десятичное значение
w = 1       # вес разряда (сначала это p^0 = 1)

# Пока в числе n ещё остались цифры...
while n > 0:
    last_digit = n % 10          # беру последнюю цифру
    result += last_digit * w     # добавляю её с учётом веса разряда
    w *= p                       # увеличиваю вес разряда (умножаю на p)
    n //= 10                     # убираю последнюю цифру из числа

print("В десятичной системе это:", result)

Пример с демонстрацией каждого шага алгоритма

# Ввод данных
p = int(input("Введите основание системы счисления (p ≤ 10): "))
n = int(input("Введите число в этой системе: "))

result = 0  # здесь я буду хранить десятичное число
w = 1       # вес разряда (p^0 = 1)
step = 1    # номер шага

print("\nНачинаем перевод!")
print(f"Число {n} в системе с основанием {p}:")

# Пока в числе есть цифры
while n > 0:
    last_digit = n % 10  # последняя цифра числа
    print(f"\nШаг {step}:")
    print(f"  Беру последнюю цифру: {last_digit}")
    print(f"  Вес разряда сейчас: {w}")
    print(f"  Умножаю {last_digit} × {w} = {last_digit * w}")
    result += last_digit * w
    print(f"  Промежуточный результат: {result}")
    
    w *= p        # увеличиваем вес разряда
    n //= 10      # убираем последнюю цифру
    step += 1

print("\n✅ Перевод закончен!")
print(f"В десятичной системе это: {result}")

Обрати внимание на операции с целыми числами: деление нацело и взятие остатка. Эти методы часто используют для разделения числа на цифры. Важно понимать, что сложность алгоритма линейная относительно количества цифр, то есть O(n), где n — количество цифр в числе.