<
Factorialul unui număr întreg pozitiv este definit ca:
n! = N * (n-1) * (n-2) * (n-3) *. * 2 * 1
1! = 1
0! = 1
Exemplu: 5! = * 4 * 5 3 * 2 * 1
>
// iterativă Soluție:
funcţia FacIterative # 40; n: Word # 41;. longint;
var
f: LongInt;
I: Integer;
începe
f: = 1;
pentru i: = 2 până la n do f: = f * i;
Rezultat: = f;
se încheie;
// Soluție recursive:
funcţia FacRecursive # 40; n: Word # 41;. LongInt;
începe
dacă n> 1, atunci
Rezultat: = n * FacRecursive # 40; n -1 # 41;
altfel
Rezultat: = 1;
se încheie;
Procedura de constatare valoarea exactă a factorial.
Ați găsit vreodată factorialul 10? - este ușor, dar 20 și 100? Chiar și cu cele mai avansate calculator care nu funcționează, (mă refer la valoarea exactă, cum ar fi 100! -158 numere, ceea ce ar trebui să fie pe afișajul calculatorului pentru a afișa o astfel de valoare.) C, folosind algoritmul conține un program similar cu cel descris, se poate face. Pentru un astfel de program, au nevoie de o formă (Forma, care conține Memo astfel de componente (numele procedurii mmOutput), Maskedit (med), ProgressBar (PB-nu este necesar, dar dacă credeți că un factorial foarte mare, este nevoie de ceva timp, astfel încât să păstreze vizual evidența timpului rămânând în calcul, este foarte convenabil), ideea programului :. variabile în Delphi nu pot conține astfel de numere lungi, așa că folosește o serie de variabile întregi, de prelucrare, care și pentru a obține răspunsul corect ca rezultat, putem presupune factorial multe mii de numere, m-am gândit 5000 pe.! luate în considerare pentru o lungă perioadă de timp, dar posibil.
Procedura TForm1. bbRunClick # 40; Expeditor: TObject # 41; ; // evenimente mâner mouse-ul
var // această secțiune indică variabilele
Rezultatul: string; // variabila rezultat de tip întreg
M: matrice de număr întreg;
// „M“ - este o matrice sau o matrice, care este dinamic, adică, dimensiunea acesteia poate fi
F, i, j, k, n: integer;
// schimba acest lucru mărește durata de funcționare a programului, dar este interesant pentru a încerca
în cazul în med. text = '' atunci
med. Text: = '0'; // proprietate componentă de text med este verificată
n: = StrToInt # 40; tunde # 40; MEd. text # 41; # 41; ;
// număr introdus, de conversie număr StrToInt-line
ieșire; // decorația de eliminare a spațiilor dintr-un șir de caractere
PB. Max: = # 40; n + sqr # 40; n # 41; # 41; ; // Această definiție dimensiuni PB
ecran. Cursor: = crHourGlass;
Apare // nou cursorul, standardul „vindovsky“
setlength # 40; M, 2 # 41; ; // defini limite matrice
M # 91; 0 # 93; : = 1; // atribuire element de 0th matrice valoare M 1.
pentru i: = 1 la n do
PB. StepBy # 40; i * 2 # 41; ; // indicații de schimbare PB
pentru j: = 0 la k face
setlength # 40; M, k + 1 # 41; ;
M # 91; j # 93; : = M # 91; j # 93; * I + F; // aici ideea de bază a programului
dacă # 40; M # 91; j # 93; div 10 # 41;> 0 atunci
F: = M # 91; j # 93; div 10;
M # 91; j # 93; : = M # 91; j # 93; Mod 10;
pentru i: = k downto 0 do // sortare valori întregi ale k la 0
dacă M # 91; eu # 93;> 0 atunci
dacă M # 91; eu # 93; = 0 atunci
setlength # 40; M, k # 41; ; // redimensionarea matrice M la numărul de elemente-k
pentru j: = k downto 0 do
Rezultat: = Rezultat + IntToStr # 40; M # 91; j # 93; # 41; ;
mmOutput. Linii. adăuga # 40; IntToStr # 40; n # 41; + „! = „+ Rezultat # 41; ;
dacă N6. Verificat = true atunci
mmoutput. Linii. adăuga # 40; „Acest număr“ + IntToStr # 40; lungime # 40; rezultat # 41; # 41; + 'Numere'. # 41; ;
M: = zero; // Numărul de conversie deallocation IntToStr-line în
ecran. Cursor: = crDefault; // modifica cursorul
Med. setfocus; // transfera med componente focus intrare