По заданному значению факториала 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.
Объяснение кода листинга программы
- В начале кода подключается модуль CRT, который позволяет использовать функции ввода-вывода.
- Затем определяются переменные:
- a - строка, в которую считывается значение из файла;
- m - массив байтов, который будет хранить цифры делимого;
- ch - массив байтов, который будет хранить цифры частного;
- b - целочисленное значение, которое является делителем;
- n, n1, i - целочисленные переменные для размеров массивов и счетчика циклов;
- os, x - переменные типа longint для хранения остатка и текущего делимого.
- После этого происходит инициализация: очистка экрана и считывание строки из файла в переменную a, а также считывание целочисленного значения делителя в переменную b.
- Если считанное число типа integer и меньше делителя, то выводится 0 и происходит выход из программы.
- Определяется размер исходного массива, который равен количеству разрядов числа.
- Затем происходит преобразование строки в массив цифр, используя функцию ord для получения числового значения каждого символа.
- Далее выполняется цикл, который формирует первое текущее делимое путем умножения и сложения цифр.
- Определяется первая цифра частного путем деления первого текущего делимого на делитель.
- Сохраняется остаток от деления в переменной os.
- Если делимое не закончилось, то выполняется цикл, который добавляет каждую следующую цифру к остатку, умноженному на 10.
- Результат выводится на экран с помощью цикла, в котором каждая цифра частного записывается в соответствующий элемент массива ch и выводится на экран.
- В конце программы выводится символ новой строки для перехода на новую строку.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д