Вычислить 100!+2^100 - Free Pascal

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

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

Нужно написать процедуру нахождения 100 факториал + 2 в 100 степени. Вот 2 блока программы. Они различны тем, что A[J] := A[J] * 2 (для 2^100), а A[J] := A[J] * I (для 100 факториал). Помогите укоротить и оптимизировать написав процедуру.
program Project800;
{$R *.res}
 
uses
System.SysUtils;
 
type
Mas = array [1 .. 100] of Integer;

procedure NotNull(A: Mas; K: Integer);
begin
if A[K] < 10000 then
Write(0);
if A[K] < 1000 then
Write(0);
if A[K] < 100 then
Write(0);
if A[K] < 10 then
Write(0);
Write(A[K]);
end;
 
var
I, F1,m, N,J: Integer;
A: Mas;
//Блок выполняющий возведения 2^100 степени
begin
A[1] := 1;
for I := 2 to 100 do
begin
for J := 1 to 99 do
A[J] := A[J] * 2;
for J := 1 to 99 do
if A[J] > 999999 then
begin
A[J + 1] := A[J + 1] + A[J] div 1000000;
A[J] := A[J] mod 1000000;
end;
end;
F1 := 1;
for I := 100 downto 1 do
begin
if F1 = 0 then
NotNull(A, I);
if (A[I] > 0) and (F1 = 1) then
begin
J:=A[I];
Write(J);
end;
end;
 
//Блок программы выполняющая вычмисления 100!.
begin
A[1] := 1;
for I := 2 to 100 do
begin
for M := 1 to 99 do
A[M] := A[M] * I;
for M := 1 to 99 do
if A[M] > 999999 then
begin
A[M + 1] := A[M + 1] + A[M] div 1000000;
A[M] := A[M] mod 1000000;
end;
end;
F1 := 1;
for I := 100 downto 1 do
begin
if F1 = 0 then
NotNull(A, I);
if (A[I] > 0) and (F1 = 1) then
begin
N:=A[I];
Write(N);
end;
end;
end;
ReadLn;
end.

Решение задачи: «Вычислить 100!+2^100»

textual
Листинг программы
{$mode objfpc}
uses gmp;
 
var
  p, q : mpz_t;
  i : integer;
begin
  mpz_init_set_si(p, 1);
  mpz_init_set_si(q, 1);
  for i := 1 to 100 do
  begin
    p := p * i;
    q := q * 2;
  end;
  p := p + q;
  mp_printf('%Zd', [@p]);
end.

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

  1. Объявлены переменные p, q типа mpz_t, предназначенные для работы с большими числами.
  2. Инициализированы переменные p, q значением 1.
  3. Задаётся цикл от 1 до 100.
  4. В каждой итерации цикла переменная p умножается на текущее значение i, а переменная q умножается на 2.
  5. После завершения цикла, значение переменной p увеличивается на значение переменной q.
  6. Используя функцию mp_printf, выводится на экран значение переменной p.

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


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

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

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