Определить цифру, стоящую на к-том месте последовательности. - PascalABC.NET
Формулировка задачи:
Дана последовательность натуральных чисел 12456789101112131415161718192021...
Написать программу для определения цифры, стоящей на к-том месте той последовательности.
Формат входных данных
Стока файла содержит позицию К.
Формат выходных данных
Выходной файл содержит цифру, стоящую на к-том месте этой последовательности.
написал что-то такое... Но это не работает.
Листинг программы
- Var
- k : integer;
- begin
- read (k);
- if k mod 2 = 0 then
- writeln ((k div 2 - 1) mod 10)
- else writeln ((k div 2 - 1) div 10 + 1);
- end.
что-то вообще я не то написал... Поможете?
Решение задачи: «Определить цифру, стоящую на к-том месте последовательности.»
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
вызывается с аргументом, введенным пользователем, и результат выводится на консоль.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д