Вычислить 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.
Объяснение кода листинга программы
- Объявлены переменные p, q типа mpz_t, предназначенные для работы с большими числами.
- Инициализированы переменные p, q значением 1.
- Задаётся цикл от 1 до 100.
- В каждой итерации цикла переменная p умножается на текущее значение i, а переменная q умножается на 2.
- После завершения цикла, значение переменной p увеличивается на значение переменной q.
- Используя функцию mp_printf, выводится на экран значение переменной p.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д