IT şi electronică > Programare
100 factorial
HarapAlb:
--- Citat din: mircea_p din Martie 06, 2012, 12:04:15 a.m. ---Cum pentru a rezolva problema e suficient sa se cunosaca digitii rezultatului si nu numarul in sine, se pare ca o metoda ar fi sa calculezi produsul cu o rutina proprie, care stocheaza digitii rezultatului (si nu numarul in sine) cu o variabila de tip pointer.
--- Terminare citat ---
Rutina aia proprie e tot un mod de a calcula cu numar "infinit" de digiti. Interesant este sa calculezi fara sa stochezi numarul intreg.
mircea_p:
--- Citat din: HarapAlb din Martie 06, 2012, 12:18:48 a.m. ---
--- Citat din: mircea_p din Martie 06, 2012, 12:04:15 a.m. ---Cum pentru a rezolva problema e suficient sa se cunosaca digitii rezultatului si nu numarul in sine, se pare ca o metoda ar fi sa calculezi produsul cu o rutina proprie, care stocheaza digitii rezultatului (si nu numarul in sine) cu o variabila de tip pointer.
--- Terminare citat ---
Rutina aia proprie e tot un mod de a calcula cu numar "infinit" de digiti. Interesant este sa calculezi fara sa stochezi numarul intreg.
--- Terminare citat ---
Sper ca nu s-a inteles ca ar fi rutina mea.
Voiam sa spun ca nu e inclusa in limbaj ci trebuie sa o scrie cel ce vrea sa o foloseasca.
Rutina din exemplu face inmultirea la fel cum se face pe hartie.
Nu stiu ce vrei sa spui cu numarul infinit de digiti. Nu trebuie sa stocheze altceva decat intregi intre 0 si 9 in "sirul" la care se refera pointerul (cu lungimea maxim 255) si niste valori intermediare intregi (cu valori sub 100) in variabilele intermediare (digit, carry, etc). etc.
HarapAlb:
Rutina respectiva face acelasi lucru ca si biblioteca respectiva de calcul cu precizie arbitrara. Asa pot sa definesc o clasa "ExtralargeInteger" compusa din cativa long unsigned int pe care sa definesc operatiile de adunare, inmultire si sa manevrez intern transportul catre bitii semnificativi.
Intrebarea este daca poti calcula suma fara sa inmagazinezi digitii numarului.
tavy:
O idee ar fi să elimini din produs numerele care nu afectează suma cifrelor.
Spre exemplu se pot elimina perechile 50*2, 25*4, 20*5, 10*1.
Se pot înlocui 30 cu 3, 40 cu 4, etc.
Se pot găsi și alte moduri de a reduce valoarea produsului.
În felul acesta nu este exclus să se ajungă ca produsul rămas să se încadreze într-un „unsigned” sau măcar într-un „long double”.
AlexandruLazar:
Din pacate, asta e mai mult o problema de matematica, nu de programare. Solutia la care se gandea mircea_p pare a fi cea corecta, si aici gasesti cateva link-uri la niste proprietati matematice care te-ar putea ajuta sa accelerezi timpul de calcul.
Navigare
[#] Pagina următoare
Du-te la versiunea completă