Введи с клавиатуры два числа: p (1 < p < 11) и n, записанное в системе счисления с основанием p. Убедись, что число n записано без ошибок. Переведи n в десятичную систему и отобрази результат на экране.
Классический алгоритм для этой задачи выглядит так:
- Вес самого младшего разряда в любой позиционной системе счисления равен 1, поэтому перед началом работы установим текущий вес разряда равным единице, а итоговое число будем накапливать в итоговом результате
- Возьмём последнюю цифру заданного числа и умножим её на текущий вес
- Добавим результат умножения к итоговому результату
- Отбросим последнюю цифру числа от числа n, а текущий вес умножим на p
- Если 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 — количество цифр в числе.
