Мини-урок · перед практикой

Первая цифра после точки

Извлекаем цифру десятых из точного десятичного представления.

Как к ней подойти

Увидите, как целочисленные операции и вычисления с дробями помогают обойтись без лишних шагов.

Коротко о теме

Операции // и % помогают разделить число на целую часть и остаток. Для дробных вычислений следите за точностью и порядком действий: одно и то же число может требовать разного способа обработки.

Ключевая идея · Цифра в точной десятичной записи

Decimal точно читает десятичную запись без арифметического округления. В as_tuple цифры хранятся отдельно от показателя степени десяти. После сдвига десятичной точки цифра десятых имеет индекс len(digits) + exponent; за пределами значащих цифр стоит ноль. Поддерживается и экспоненциальная запись.

Проверьте перед запуском

  • Вещественное умножение или Decimal с ограниченной точностью могут округлить число перед выделением цифры.
  • Если дробной части нет, ответ 0.

Сравните свой подход

Ниже - готовое решение, другой способ, если он есть, и важные детали проверки.

Ваше принятое решение

Рекомендуемое решение: Цифра в точной десятичной записи

Decimal точно читает десятичную запись без арифметического округления. В as_tuple цифры хранятся отдельно от показателя степени десяти. После сдвига десятичной точки цифра десятых имеет индекс len(digits) + exponent; за пределами значащих цифр стоит ноль. Поддерживается и экспоненциальная запись.

from decimal import Decimal
parts = Decimal(input()).as_tuple()
index = len(parts.digits) + parts.exponent
print(parts.digits[index] if 0 <= index < len(parts.digits) else 0)

Время: O(L), L — длина входной записи. Память: O(L) для цифр и входа.

Другой способ: Развёрнутая запись числа

Разворачиваем экспоненциальную запись в обычную, затем берём первую цифру дробной части. Этот вариант проще читать, но очень большой показатель степени может создать длинную строку.

from decimal import Decimal
s = format(Decimal(input()), 'f')
fraction = s.partition('.')[2]
print(fraction[0] if fraction else '0')

Время: O(L + E), E — длина развёрнутой записи. Память: O(L + E).