Zad. 2. Napisz funkcję, która dla nieujemnej liczby n, takiej, że
$$0\leq n\leq 30$$
wyznaczy dwusilnię.
Rozwiązanie.
Dwusilnię dla dowolnej liczby naturalnej n wyznaczamy według wzoru:
$$n!! = \left\{\begin{matrix} 1 &,\ dla\ n = 0\\ n \cdot (n-2) \cdot (n-4) \cdot ... \cdot 4 \cdot 2 &,\ dla\ n\; parzystego\; dodatniego \\n \cdot (n-2) \cdot (n-4) \cdot ... \cdot 3 \cdot 1 &,\ dla\; n\; nieparzystego\end{matrix}\right.$$
Dla przykładu policzmy:
$$5!! = 5 \cdot 3 \cdot 1 = 15$$
$$6!! = 6 \cdot 4 \cdot 2 = 48$$
Dla liczby parzystej n liczymy iloczyn wszystkich liczb parzystych dodatnich niewiększych od tej liczby, natomiast dla nieparzystej iloczyn wszystkch liczb naturalnych nieparzystych niewiększych od n.
#include <iostream>
using namespace std;
long long dwusilnia(unsigned int n)
{
long long ds = 1; //zmienna przechowująca kolejne mnożenia
for(;n>1;n-=2)
ds*=n;
return ds;
}
int main()
{
unsigned int n;
cout<<"Podaj liczbę: ";
cin>>n;
cout<<"Dwusilnia z liczby "<<n<<" wynosi "<<dwusilnia(n)<<endl;
return 0;
}