PDA

View Full Version : [C++]Algoritm factorial



~Wolf~
01-03-2020, 02:44 PM
Algoritm pentru calcularea factorialului unui numar natural

Varianta standard
#include <iostream>
using namespace std;
unsigned int n,p=1; // n-numarul , p-produsul
int main()
{
cin>>n;
while(n) // cat timp n diferit de 0
{
p*=n; //facem produsul descrescator, adica pt n=7, p va fi p=1*7 , n=n-1 , adica n=7-1=6, apoi n=6, p=7*6, n=5 etc
n--; //cum spuneam , scadem numarul cu cate 1 pentru a obtine factorialul
}
cout<<"Factorialul numarului dat este: "<<p;
return 0;
}

Varianta cu functie
#include <iostream>
using namespace std;
unsigned int n,p=1;
unsigned int factorial(unsigned int n) //prototipul functiei
{
//exact acelasi algoritm ca in varianta standard
while(n)
{
p*=n;
n--;
}
return p; // returnam produsul care este, defapt, factorialul
}
int main()
{
cin>>n;
cout<<"Factorialul numarului dat este: "<<factorial(n);
return 0;
}

Varianta recursiva
#include <iostream>
using namespace std;
unsigned int n,p=1;
unsigned int factorial(unsigned int n,unsigned int p) //prototipul functiei
{
if(n<=1) //conform matematicii , 0!=1 , 1!=1
return 1;
return n*factorial(n-1); //se va calcula descrescator, adica pentru n=7 , 7!=7*6*5*4*3*2*1
}
int main()
{
cin>>n;
cout<<"Factorialul numarului dat este: "<<factorial(n);
return 0;
}

~Wolf~
03-03-2020, 05:10 PM
Calcularea unei combinari

Stim ca, <b>You have to register to ba able to see this link</b> cu conditiile : n-nr. natural, k-nr. natural si n>=k
Algoritmul calcularii unui numar combinatoric:
#include <iostream>
using namespace std;
unsigned n,k;
//algoritmul factorialului transpus intr-un subprogram
unsigned factorial(unsigned n)
{
unsigned p=1;
while(n)
{
p*=n;
n--;
}
return p;
}
int main()
{
cin>>n>>k;
cout<<factorial(n)/(factorial(k)*factorial(n-k)); //formula
return 0;
}