Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

funkcja liczaca silnie znakowo z wykorzystaniem wzoru Stirlinga

Ostatnio zmodyfikowano 2017-06-10 20:55
Autor Wiadomość
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
P-162308
jankowalski25
» 2017-06-09 23:17:03
Nie wiem jak sie za to zabrac od poczatku
https://pl.wikipedia.org/wiki​/Wzór_Stirlinga

Co znaczy znakowo?
Pewnie 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ć.
P-162311
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
P-162314
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:)
P-162315
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?
P-162317
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ć
P-162328
mateczek
» 2017-06-10 19:37:42
C/C++
#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
P-162344
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 :)
P-162347
« 1 » 2
  Strona 1 z 2 Następna strona