Titlul: Factorial
Scris de: Jurj Andrei din Martie 19, 2014, 21:45:28
Am clasica problema factorial si imi cere sa scriu functia care returneaza nr de zerouri.Problema e ca imi iese din timp...n<1000.000.000 #include<iostream> using namespace std; int nz(int n) {int nr=0,y,cnt; if(n<4) return nr; else for(int i=5,cnt=1;i<=n;i=i+5,++cnt) {if(cnt%5) ++nr; else {y=i; while(y%5==0) y=y/5,++nr; } } return nr; } Acum ma gandesc exista o metoda sa aflu nr de zerouri fara sa parcurg/sa parcurg in doar cativa pasi? Codul nu l-am scris fix asa...l-am modificat putin.Intrebarea mea este ideea.
Titlul: Răspuns: Factorial
Scris de: Boaca Cosmin din Martie 20, 2014, 10:13:52
Secventa asta de cod while (s % 5 == 0) y = y / 5, ++nr;
O sa iti intre in ciclu infinit, deoarece tu pui o conditie pentru s dar nu il modifici in niciun fel. In plus, nu imi dau seama cine e s, pentru ca aparent nu ai niciun s declarat in functie. s e o variabila globala ? In cazul in care s nu e vreo variabila globala cel mai probabil codul ala nici macar nu compileaza. Poti sa te uiti pe infoarena la problema factorial [ 0 ] si cred ca gasesti acolo in comentarii rezolvarea pentru ce vrei tu. [ 0 ] http://www.infoarena.ro/problema/fact
Titlul: Răspuns: Factorial
Scris de: Jurj Andrei din Martie 20, 2014, 15:52:35
Am gasit.Functia a devenit: #include<iostream> #include<cmath> using namespace std;
int nz(int n) {int nr=0,i=5,cnt=1; while(n/pow(i,cnt)>=1) {nr=nr+n/pow(i,cnt); ++cnt; } return nr; }
Multumesc de ajutor.
|