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