Получить последовательность по правилу - 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, чтобы записать результат в стандартный поток вывода.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д