Правило Боба Получив от Алисы несколько зашифрованных сообщений, Боб решил вплотную заняться криптографией. И первое, что он сделал, естественно, - придумал свой шифрования целых положительных чисел. Боб решил поставить в соответствие целому положительному числу K=a1a2a3a4an несократимую дробь вида M/N по правилу показанному, на рисунке (здесь n - количество цифр числа, a1, a2, ..an - сами цифры):
Например, числу 3 по этому правилу будет соответствовать дробь 3/1. Числу 25 будет соответствовать дробь 11/5. Числу 234 - дробь 30/13, а числу 6235 - дробь 238/37.
Напишите для Боба программу, которая, получив на входе некоторое целое положительное число K, выведет несократимую дробь, полученную в соответствии с правилом Боба.
Формат входных данных
Единственная строка входных данных содержит целое положительное число K (1 ≤ K ≤ 1018). Гарантируется, что число K не оканчивается нулем и не начинается лидирующими нулями.
Формат результата
Выведите несократимую дробь, которая получается из входного числа по правилу Боба. Если в результате примeнения правила Боба к входному числу получается целое число N, его необходимо вывести как дробь со знаменателем 1, то есть в виде N/1.
Примеры
Входные данные
25
Результат работы
11/5=2+1/5
Входные данные
234
Результат работы
30/13=2+1/3+1/4
Начнем с написания псевдокода решения задачи:
1. Считываем целое положительное число K с помощью функции input().
2. Переменные M и N устанавливаем равными 1, так как изначально у нас имеется целое число.
3. Создаем пустую строку result, в которой мы будем хранить результат вывода в нужном формате.
4. Запускаем цикл, который будет работать до тех пор, пока K не станет равным 0.
5. Внутри цикла:
- Находим количество цифр в числе K и сохраняем его в переменную n.
- Вычисляем число a1, равное первой цифре числа K, с помощью операции % (остаток от деления) и // (целочисленное деление).
- Вычисляем значение переменной M, умножая a1 на N и прибавляя M.
- Устанавливаем значение переменной K, равное числу, полученному из числа K после удаления первой цифры (с помощью операции // 10).
- Обновляем значение переменной N, умножая ее на 10 (так как на каждом шаге у нас появляется новая цифра справа).
- Добавляем в переменную result текущую дробь (a1/N) с помощью строки формата.
6. После окончания цикла проверяем, осталось ли у нас целое число или есть дробные части, сохраненные в K.
- Если K равно 0, значит, у нас получилось целое число, и в результате выводим результат в формате N/1.
- Если K больше 0, значит, у нас есть дробная часть. В этом случае располагаем дробные части в нужные позиции и выводим результат.
Теперь, когда у нас есть псевдокод, можно перейти к реализации на выбранном языке программирования. Приведу пример решения на языке Python:
```python
# Чтение входного числа K
K = int(input())
# Инициализация переменных M и N
M = 1
N = 1
# Инициализация пустой строки result
result = ""
# Цикл для нахождения дробных частей
while K != 0:
n = len(str(K))
a1 = K % 10
M = a1 * N + M
K = K // 10
N = N * 10
result += f"{a1}/{N}+"
# Проверка наличия дробной части
if K == 0:
result = result[:-1] # Удаление последнего символа (плюса)
print(f"{M}/{N}= {result}")
else:
result = result[:-1] # Удаление последнего символа (плюса)
# Добавление дробных частей в нужные позиции
for i in range(1, n):
fraction = f"1/{N}"
result = result[:-(2 * i)] + fraction + result[-(2 * i):]
print(f"{M}/{N}= {result}")
```
Надеюсь, что данное объяснение и код помогут вам понять, как решить данную задачу. Если у вас возникнут вопросы, не стесняйтесь задавать их!