Часы - 3
Вы решили задачу. Теперь можно сравнить подходы.
Переводим угол в полные секунды и раскладываем их на часы, минуты и секунды.
Авторский разбор для локальной версии на основе условия задачи. Это не выгрузка чужих посылок и не официальное решение исходного сайта.
Ваше принятое решение
Рекомендуемое решение: Рекомендуемый подход
Decimal предотвращает двоичную погрешность около целой секунды для обычной длины входа. int отбрасывает неполную секунду; divmod выделяет полные единицы времени.
from decimal import Decimal
angle = Decimal(input())
total = int(angle * 120)
h, remainder = divmod(total, 3600)
m, s = divmod(remainder, 60)
print(h, m, s)
Время: O(d) для чтения d цифр; десятичная арифметика зависит от точности контекста, здесь фиксированной. Память: O(d) для записи и чисел.
Другой способ: Другой способ
Рациональная арифметика точно хранит десятичный ввод любой длины. Целая часть произведения на 120 задаёт количество полных секунд.
from fractions import Fraction
angle = Fraction(input())
total = (angle * 120).__floor__()
h = total // 3600
m = total // 60 % 60
s = total % 60
print(h, m, s)
Время: O(d) на чтение d цифр; рациональная арифметика зависит от длины числа. Память: O(d) для записи и чисел.
На что обратить внимание
- Нужны полные секунды: округление до ближайшей секунды неверно.
- Часы не следует брать по модулю 12: тесты включают значения больше 12 часов.
- Decimal использует конечную точность контекста; для необычно длинного ввода подходит Fraction.
Рекомендация учитывает сложность и читаемость для этой задачи. Единственного самого быстрого решения для всех размеров входа и всех компьютеров может не быть.