funkcja liczaca silnie znakowo z wykorzystaniem wzoru Stirlinga
Ostatnio zmodyfikowano 2017-06-10 20:55
degel1234 Temat założony przez niniejszego użytkownika |
funkcja liczaca silnie znakowo z wykorzystaniem wzoru Stirlinga » 2017-06-09 22:24:24 Czesc mam nastepujace polecenie: Napisac funkcje obliczajaca silnie znakowo - wykorzystaj wzor Stirlinga do okreslenia liczby znakow dla wyniku.
Nie wiem jak sie za to zabrac od poczatku ;/ Co znaczy znakowo? Normlna silnie to latwo zrobic a tu ciezko zrozumiec polecenie ;P Licze na pomoc i moze razem cos wykminimy |
|
jankowalski25 |
» 2017-06-09 23:17:03 Nie wiem jak sie za to zabrac od poczatku | https://pl.wikipedia.org/wiki/Wzór_StirlingaPewnie chodzi o to, aby nie przechowywać wyniku w jakichś zmiennych typu unsigned int czy unsigned long long , tylko jako ciąg znaków (na przykład std::string , ale niekoniecznie - BCD chyba też może być, jeśli to ma być wypisywane dziesiątkowo). Jeśli chodzi o obliczanie liczby potrzebnych miejsc, to bierzesz logarytm z szukanej wartości o podstawie zgodnej z systemem liczenia. W przypadku dziesiątkowego będzie to log10(n!) (nie bierz liczby Eulera jako podstawy!). Wzór dla ln(n!) masz rozpisany, dla innej podstawy wystarczy go nieco przekształcić. |
|
degel1234 Temat założony przez niniejszego użytkownika |
» 2017-06-10 09:04:08 Czyli najpierw obliczam silnie ze wzoru stirlinga, pozniej badam ile ma ona cyfr (za pomoca logarytmu) i pozniej deklaruje tablice tylu elementowa i tam przechowuje wyniki? Ale jak je znalezc po kolei? Szczerze ciezko mi to zrozumiec a musze miec ten program napisany ;P |
|
mateczek |
» 2017-06-10 09:36:49 "znakowo" może oznaczać, że twoja silnia będzie musiała być liczona dla liczb, które nie mieszczą się w zakresie standardowym "long long" i masz liczyć tak jak się liczy na kartce. posługując się stringami. Ale o takie rzeczy najlepiej zapytaj tego kto Ci dał te zadanie:) |
|
degel1234 Temat założony przez niniejszego użytkownika |
» 2017-06-10 11:10:56 W jakim sensie mam korzystac z typu string? Rozumiem ze chodzi Ci o te ze 10! to 1*2*...*10 i po kolei to upraszczac a cyfre jednosci, dziesiatek setek itp zapisywac w jakiejs tablicy? |
|
mateczek |
» 2017-06-10 14:45:17 jak spróbujesz napisać program który policzy 21!(metoda obojętna)! to sam będziesz wiedział o co może chodzić |
|
mateczek |
» 2017-06-10 19:37:42 #include <iostream> #include <gmpxx.h> using namespace std;
int main() { mpz_class liczba = 1; long long liczba2 = 1; long double liczba3 = 1; for( int i = 2; i < 22; i++ ) { liczba *= i; liczba2 *= i; liczba3 *= i; } cout << "21 silinia " << endl; cout << "gmp = " << liczba << endl; cout << "cpp long long = " << liczba2 << endl; cout << fixed << "double = " << liczba3 << endl; }
21 silinia gmp = 51090942171709440000 cpp long long = -4249290049419214848 double = 51090942171709440000.000000
jak widać przy 21! typ long long już się kończy zakres wydaje mi się że masz napisać algorytm liczenia na strigach by liczyć wysokie silnei. Typ zmiennoprzecinkowy może Ci posłużyć do określenia długości wyniku przybliżony wynik. Są dwie metody aby liczyć wysokie silnie. Albo liczyć ręcznie, albo skorzystać z biblioteki jak ja wyżej |
|
degel1234 Temat założony przez niniejszego użytkownika |
» 2017-06-10 20:41:20 ehh nie wiem czy to na moja glowe :/ Moze jest ktos ambitny komu chce sie zrobic pelny kod i go opublikowac, zawsze to jakies wyzwanie ;) Dzieki wszystkim ktorzy sie zaangazowali w pomoc, moze jeszcze do tematu wroce :) |
|
« 1 » 2 |