Получить последовательность по правилу - 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.

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

  1. Создается тип данных tNum, представляющий массив byte от -1 до 255.
  2. Определяется процедура Mul, которая умножает переменную N на число v и обновляет соответствующие элементы массива N.
  3. Определяется функция Dec, которая делит переменную a на b и возвращает результат в виде нового массива.
  4. Определяется процедура WriteNum, которая записывает элементы массива N в стандартный поток вывода.
  5. Создаются две переменные типа tNum: f и d.
  6. Задаются начальные значения для переменных f и d: f[-1] = 1, f[0] = 1, d[-1] = 1, d[0] = 1. Это единицы, соответствующие числам 1! и 2^0.
  7. Запускается цикл, в котором умножаются элементы массива f на числа от 1 до 100 и затем умножаются элементы массива d на число 2.
  8. После завершения цикла вызывается функция Dec, которая делит массив f на массив d.
  9. Наконец, вызывается процедура WriteNum, чтобы записать результат в стандартный поток вывода.

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


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

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

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