По заданному значению факториала n! определить n - Free Pascal

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

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

Дано число

n!.

По нему вычислить значение

n

. Ответ не превышает

1000.

Примеры:

1)

Ввод:

5040

Вывод:

7

2)

Ввод:

6

Вывод:

3

Решение задачи: «По заданному значению факториала n! определить n»

textual
Листинг программы
uses
  crt;
 
var
  a: string;{строка, читаем из файла}
  m: array[1..100] of byte;{делимое как массив цифр}
  ch: array[1..100] of byte;{частное как массив цифр}
  b: integer;{делитель из файла}
  n, n1, i: integer;{размеры массивов и счетчик циклов}
  os, x: longint;{остаток и текущее делимое}
 
begin
  clrscr;
  readln(a);
  read(b);
  val(a, n, i);{попробуеи преобразовать строку в число}
  if(i = 0) and (n < b) then{если число типа integer, и меньше делителя}
  begin
    write(0);{пишем 0}
    exit;{завершаем программу}
  end;
  n := length(a);{количество разрядов=размер исходного массива}
  for i := 1 to n do
    m[i] := ord(a[i]) - 48;{создадим массив цифр из символов строки}
  {вычислим старший разряд частного}
  x := 0;
  i := 0;
  while x < b do{составим первое текущее делимое}
  begin
    i := i + 1;
    x := x * 10 + m[i];
  end;
  n1 := 1;
  ch[n1] := x div b;{пишем в результат первую цифру}
  os := x mod b;{сохраняем остаток}
  if i < n then{если делимое не кончилось, считаем дальше}
    repeat
      i := i + 1;{добавляем следующую цифру }
      x := os * 10 + m[i];{справа к остатку, умноженному на 10}
      n1 := n1 + 1;
      ch[n1] := x div b;{следующая цифра частного}
      os := x mod b;{новый остаток}
    until(i = n);{последня цифра - конец}
  for i := 1 to n1 do write(ch[i]);{пишем результат}
  writeln;
end.

Объяснение кода листинга программы

  1. В начале кода подключается модуль CRT, который позволяет использовать функции ввода-вывода.
  2. Затем определяются переменные:
    • a - строка, в которую считывается значение из файла;
    • m - массив байтов, который будет хранить цифры делимого;
    • ch - массив байтов, который будет хранить цифры частного;
    • b - целочисленное значение, которое является делителем;
    • n, n1, i - целочисленные переменные для размеров массивов и счетчика циклов;
    • os, x - переменные типа longint для хранения остатка и текущего делимого.
  3. После этого происходит инициализация: очистка экрана и считывание строки из файла в переменную a, а также считывание целочисленного значения делителя в переменную b.
  4. Если считанное число типа integer и меньше делителя, то выводится 0 и происходит выход из программы.
  5. Определяется размер исходного массива, который равен количеству разрядов числа.
  6. Затем происходит преобразование строки в массив цифр, используя функцию ord для получения числового значения каждого символа.
  7. Далее выполняется цикл, который формирует первое текущее делимое путем умножения и сложения цифр.
  8. Определяется первая цифра частного путем деления первого текущего делимого на делитель.
  9. Сохраняется остаток от деления в переменной os.
  10. Если делимое не закончилось, то выполняется цикл, который добавляет каждую следующую цифру к остатку, умноженному на 10.
  11. Результат выводится на экран с помощью цикла, в котором каждая цифра частного записывается в соответствующий элемент массива ch и выводится на экран.
  12. В конце программы выводится символ новой строки для перехода на новую строку.

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


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

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

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