Определить цифру, стоящую на к-том месте последовательности. - PascalABC.NET
Формулировка задачи:
Дана последовательность натуральных чисел 12456789101112131415161718192021...
Написать программу для определения цифры, стоящей на к-том месте той последовательности.
Формат входных данных
Стока файла содержит позицию К.
Формат выходных данных
Выходной файл содержит цифру, стоящую на к-том месте этой последовательности.
написал что-то такое... Но это не работает.
что-то вообще я не то написал... Поможете?
Решение задачи: «Определить цифру, стоящую на к-том месте последовательности.»
textual
Листинг программы
function get_digit(n: longint): char; var i: longint; digits: byte; start_of, maximal: longint; num_of_n, num_of_digit: integer; s: string; begin digits := 1; start_of := 0; maximal := 9; while n > digits * maximal + start_of do begin inc(digits); maximal := maximal * 10; inc(start_of, pred(digits) * (maximal div 10)); end; maximal := maximal div 10; dec(n, start_of); num_of_n := (n div digits) + ord((n mod digits) <> 0); num_of_digit := n - digits * pred(num_of_n); n := 1; for i := digits downto 2 do n := n * 10; str(n + pred(num_of_n), s); get_digit := s[num_of_digit]; end; begin writeln(get_digit(ReadInteger())); end.
Объяснение кода листинга программы
В этом коде определена функция под названием get_digit
, которая принимает целочисленный аргумент n
. Функция извлекает цифру, находящуюся на определенном месте в числе n
. В частности, функция извлекает цифру, стоящую на k-м месте, где k - это число, введенное пользователем.
Код выполняет следующие действия:
- Устанавливает переменную
digits
равной 1, которая представляет собой текущую позицию, на которой ищется цифра. - Устанавливает переменную
start_of
равной 0, которая представляет собой начальную позицию в числеn
, с которой начинается поиск. - Устанавливает переменную
maximal
равной 9, которая представляет собой максимальное количество цифр, которое может быть извлечено из числаn
. - Входит в цикл while, который продолжается до тех пор, пока
n
больше, чемdigits
умноженное наmaximal
и прибавленноеstart_of
. - Внутри цикла увеличивает значение
digits
на 1, чтобы перейти к следующей позиции. - Увеличивает значение
maximal
на 10, чтобы проверить следующую позицию. - Увеличивает значение
start_of
на предыдущее значениеdigits
, умноженное на 10, чтобы перейти к следующей группе из 10 цифр. - После выхода из цикла, устанавливает
maximal
равным его последнему значению, деленному на 10, чтобы найти последнюю группу из 10 цифр. - Уменьшает значение
n
наdigits
, умноженное на предыдущее значениеdigits
, чтобы удалить уже извлеченные цифры. - Устанавливает значение
num_of_n
равным суммеn
и 48 (код ASCII для цифры 1), плюс количество цифр, которые уже были извлечены. - Устанавливает значение
num_of_digit
равнымn
, минусdigits
, умноженное на предыдущее значениеdigits
. - Устанавливает
n
равным 1, и затем умножает его на 10 в цикле for, чтобы установить каждую позицию вn
равной 0. - Строка
s
устанавливается равной строковому представлениюn
. - Функция
get_digit
возвращает значениеs
, с индексом, равнымnum_of_digit
. - В основной программе функция
get_digit
вызывается с аргументом, введенным пользователем, и результат выводится на консоль.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д