Определить цифру, стоящую на к-том месте последовательности. - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Дана последовательность натуральных чисел 12456789101112131415161718192021... Написать программу для определения цифры, стоящей на к-том месте той последовательности. Формат входных данных Стока файла содержит позицию К. Формат выходных данных Выходной файл содержит цифру, стоящую на к-том месте этой последовательности.
Листинг программы
  1. Var
  2. k : integer;
  3. begin
  4. read (k);
  5. if k mod 2 = 0 then
  6. writeln ((k div 2 - 1) mod 10)
  7. else writeln ((k div 2 - 1) div 10 + 1);
  8. end.
написал что-то такое... Но это не работает.
что-то вообще я не то написал... Поможете?

Решение задачи: «Определить цифру, стоящую на к-том месте последовательности.»

textual
Листинг программы
  1. function get_digit(n: longint): char;
  2. var
  3.   i: longint;
  4.   digits: byte;
  5.   start_of, maximal: longint;
  6.   num_of_n, num_of_digit: integer;
  7.   s: string;
  8. begin
  9.   digits := 1;
  10.   start_of := 0;
  11.  
  12.   maximal := 9;
  13.   while n > digits * maximal + start_of do begin
  14.     inc(digits); maximal := maximal * 10;
  15.     inc(start_of, pred(digits) * (maximal div 10));
  16.   end;
  17.   maximal := maximal div 10;
  18.  
  19.   dec(n, start_of);
  20.   num_of_n := (n div digits) + ord((n mod digits) <> 0);
  21.   num_of_digit := n - digits * pred(num_of_n);
  22.  
  23.   n := 1;
  24.   for i := digits downto 2 do n := n * 10;
  25.   str(n + pred(num_of_n), s);
  26.   get_digit := s[num_of_digit];
  27. end;
  28. begin
  29.   writeln(get_digit(ReadInteger()));
  30. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы