Математик Виталий Евгеньевич задумался над вопросом выгоды систем счисления. Он решил, что выгодной системой счисления будет являться та, в которой число имеет наибольшую сумму цифр. Напишите программу, которая по введённому числу определяет основание системы счисления с максимальной выгодой.
Формат ввода
Одно натурально число.
Формат вывода:
Одно натуральное число из диапазона [2;10] — основание системы счисления с максимальной выгодой.
Если таких оснований несколько, выбирается наименьшее.
Примечание
Подробнее о системах счисления можно почитать здесь
Пример
Ввод
12
Вывод
7
Ввод
52
Вывод
9
Решение
Перевод из одной системы счисления в другую поначалу кажется сложной задачей, но только лишь до тех пор, пока не станет понятно, что в ней могут присутствовать цифры не превышающие основание системы счисления.
Так, в троичной системе счисления привычный нам ряд 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 будет выглядеть как 1, 2, 10, 11, 12, 20, 21, 22, 100, 101, а в пятеричной 1, 2, 3, 4, 10, 11, 12, 13, 14, 20.
Обратите внимание, что переход на новый разряд и обновление разрядов, случается ровно в тот момент, когда число становится равно основанию системы счисления. Из этого можно сделать простой вывод: Чтобы перевести число из десятичной системы счисления в троичную, нужно поделить с остатком число на основание. Таким образом мы получим последнюю цифру. Теперь делим число на базу и повторяем операцию, чтобы получить вторую цифру с конца и так, пока число останется больше нуля. Остается только посчитать сумму цифр для систем счисления в диапазоне от десяти до двух.
Посмотреть код
Решение
number = int(input())
best_value = 0
best_base = 0
for base in range(10, 1, -1):
summa = 0
num = number
while num > 0:
summa += (num % base)
num //= base
if summa >= best_value:
best_value = summa
best_base = base
print(best_base)
Добрый день! Небольшая ошибка в тексте решения: “в троичной системе счисления привычный нам ряд 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 будет выглядеть как 1, 2, 10, 11, 12, 20, 21, 22, 30, 31”. Но последние две цифры должны быть не 30 и 31,а 100 и 101
Вы совершенно правы. Спасибо, что помогли исправить эту опечатку.