Определить цифру, стоящую на к-том месте последовательности. - 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 - это число, введенное пользователем. Код выполняет следующие действия:

  1. Устанавливает переменную digits равной 1, которая представляет собой текущую позицию, на которой ищется цифра.
  2. Устанавливает переменную start_of равной 0, которая представляет собой начальную позицию в числе n, с которой начинается поиск.
  3. Устанавливает переменную maximal равной 9, которая представляет собой максимальное количество цифр, которое может быть извлечено из числа n.
  4. Входит в цикл while, который продолжается до тех пор, пока n больше, чем digits умноженное на maximal и прибавленное start_of.
  5. Внутри цикла увеличивает значение digits на 1, чтобы перейти к следующей позиции.
  6. Увеличивает значение maximal на 10, чтобы проверить следующую позицию.
  7. Увеличивает значение start_of на предыдущее значение digits, умноженное на 10, чтобы перейти к следующей группе из 10 цифр.
  8. После выхода из цикла, устанавливает maximal равным его последнему значению, деленному на 10, чтобы найти последнюю группу из 10 цифр.
  9. Уменьшает значение n на digits, умноженное на предыдущее значение digits, чтобы удалить уже извлеченные цифры.
  10. Устанавливает значение num_of_n равным сумме n и 48 (код ASCII для цифры 1), плюс количество цифр, которые уже были извлечены.
  11. Устанавливает значение num_of_digit равным n, минус digits, умноженное на предыдущее значение digits.
  12. Устанавливает n равным 1, и затем умножает его на 10 в цикле for, чтобы установить каждую позицию в n равной 0.
  13. Строка s устанавливается равной строковому представлению n.
  14. Функция get_digit возвращает значение s, с индексом, равным num_of_digit.
  15. В основной программе функция get_digit вызывается с аргументом, введенным пользователем, и результат выводится на консоль.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы