Получить последовательность по правилу - Turbo Pascal (29435)
Формулировка задачи:
Получить последовательность dk, dk-1, ..., d0 десятичных цифр числа 100!-2^100, , т. е. такую целочисленную последовательность, в которой каждый член di удовлетворяет условию 0≤di≤9 и, дополнительно, dk∙10k+ dk-1∙10k-1+…+ d0=100!-2^100
Решение задачи: «Получить последовательность по правилу»
textual
Листинг программы
type tNum = array [-1..255] of Byte; procedure Mul(var N : tNum; v : Integer); var i, d : Integer; begin d := 0; for i := 0 to N[-1] do begin d := d + v * N[i]; N[i] := d mod 10; d := d div 10; end; while d > 0 do begin Inc(N[-1]); N[N[-1]] := d mod 10; d := d div 10; end; end; function Dec(a, b : tNum) : tNum; var r : tNum; i, d : Integer; begin d := 0; for i := 0 to a[-1] do begin Inc(d, a[i]); if i <= b[-1] then dec(d, b[i]); if d < 0 then begin r[i] := (d + 10) mod 10; d := -1; end else begin r[i] := d mod 10; d := 0; end; end; r[-1] := a[-1]; while r[r[-1]] = 0 do Dec(r[-1]); Dec := r; end; procedure WriteNum(N : tNum); var i : Integer; begin for i := N[-1] downto 0 do Write(N[i]); WriteLn; end; var f, d : tNum; i : Integer; begin f[-1] := 1; f[0] := 1; d[-1] := 1; d[0] := 1; { это единички: 1! и 2^0 } for i := 1 to 100 do begin Mul(f, i); Mul(d, 2); end; WriteNum(Dec(f, d)); end.
Объяснение кода листинга программы
- Создается тип данных tNum, представляющий массив byte от -1 до 255.
- Определяется процедура Mul, которая умножает переменную N на число v и обновляет соответствующие элементы массива N.
- Определяется функция Dec, которая делит переменную a на b и возвращает результат в виде нового массива.
- Определяется процедура WriteNum, которая записывает элементы массива N в стандартный поток вывода.
- Создаются две переменные типа tNum: f и d.
- Задаются начальные значения для переменных f и d: f[-1] = 1, f[0] = 1, d[-1] = 1, d[0] = 1. Это единицы, соответствующие числам 1! и 2^0.
- Запускается цикл, в котором умножаются элементы массива f на числа от 1 до 100 и затем умножаются элементы массива d на число 2.
- После завершения цикла вызывается функция Dec, которая делит массив f на массив d.
- Наконец, вызывается процедура WriteNum, чтобы записать результат в стандартный поток вывода.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д