Poslao: 19 Okt 2014 12:05
|
offline
- Nikola04
- Građanin
- Niko E
- Software & Information Engineering
- Pridružio: 05 Maj 2009
- Poruke: 135
- Gde živiš: Wien
|
Imam zadatak da napišem program koji treba da prebroji cifre celog broja. (Npr za 1111 = 4, -25 = 2 ...)
Ja sam napisao program, ali nisam siguran:
private static int brojc(int num) {
int count = 0;
if (num < 0)
num *= (-1);
if (num < 10 && num >= 0) {
count = 1;
} else {
while (num > 0) {
num /= 10;
count++;
}
}
System.out.println(count);
return count;
}
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 19 Okt 2014 12:11
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
Napisano: 19 Okt 2014 12:09
U šta nisi siguran? U ispravnost? Jesi li ga pokrenuo da proveriš?
Dopuna: 19 Okt 2014 12:11
Inače, drugi if blok je suvišan. A i bez prvog se može ako se modifikuje uslov while petlje.
|
|
|
|
Poslao: 19 Okt 2014 12:12
|
offline
- Nikola04
- Građanin
- Niko E
- Software & Information Engineering
- Pridružio: 05 Maj 2009
- Poruke: 135
- Gde živiš: Wien
|
Pokrenuo sam, radi. Nisam siguran za return. I da li u jednoj metodi može biti 2 ili više return?
Taj drugi if blok mi je potreban unese nula.
|
|
|
|
Poslao: 19 Okt 2014 12:21
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
Napisano: 19 Okt 2014 12:16
Nikola04 ::I da li u jednoj metodi može biti 2 ili više return?Može.
Dopuna: 19 Okt 2014 12:21
A čekaj, šta će ti u jednoj fuknciji i štampanje vrednosti i vraćanje vrednosti? Obično se funkcije koje štampaju vrednosti deklarišu bez povratne vrednosti (void), a one koje vraćaju neku vrednost ne štampaju ništa. Odaberi jedan od ta dva načina, nema potrebe za ovim hibridima.
|
|
|
|
Poslao: 19 Okt 2014 12:44
|
offline
- Nikola04
- Građanin
- Niko E
- Software & Information Engineering
- Pridružio: 05 Maj 2009
- Poruke: 135
- Gde živiš: Wien
|
Ma ja bih to uradio ovako:
Long.valueOf(int);
Nego moram da radim sa while (tako stoji u zadatku), što se Jave tiče, apsolutni sam početnik.
|
|
|
|
Poslao: 19 Okt 2014 13:19
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
Nisam siguran šta bi postigao naredbom iznad.
Takođe, algoritam je potpuno isti ma koji jezik da je u pitanju.
|
|
|
|
Poslao: 20 Okt 2014 21:14
|
offline
- bobby
- Administrator
- Pridružio: 04 Sep 2003
- Poruke: 24135
- Gde živiš: Wien
|
Mozda neispravno sa tacke studiranja, ali ja bih prvo odradio jedan ABS (apsolutna vrednost), pa onda pretvodio broj u string (nesto tipa X.toString), i onda izmerio duzinu stringa (svaki programski jezik ima nesto tipa LEN ili LENGTH naredbe)
|
|
|
|
Poslao: 20 Okt 2014 22:00
|
offline
- vasa.93
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
To jeste moguće rešenje, ali maši suštinu koja se ogleda u tome kako "izračunati" broj cifara nekog broja. Ovo je čist školski primer.
|
|
|
|
Poslao: 21 Okt 2014 01:15
|
offline
- Rastafarii
- Moderator foruma
- Pridružio: 22 Mar 2006
- Poruke: 3760
- Gde živiš: 127.0.0.1
|
I ja bih, kao i bobby, radio sa apsolutnom vrednoscu unetog broja, jer -25 i 25 imaju isti broj cifara, ali je u kodu jedan uslov manje.
Drugi deo bi malcice drugacije uradio, ali to vec iz mene govori matematicar, a ne programer
private static int brojc(int num) {
int abs = Math.abs(num) + 1;
return abs === 0 ? 1 : Math.ceil(Math.log10(abs + 1));
}
Zasto ovako - zato sto je logaritam nekog broja eksponent kojim treba stepenovati osnovu da bi se dobio taj broj. Log10 se od "obicnog" logaritma razlikuje po tome sto mu je osnova 10.
E sad - kakve to veze ima sa zadatkom? Log10 od broja 10 je 1, od broja 100 je 2, od 123 je 2.0899051114393976. Od 0 tezi minus beskonacnosti, pa to izdvajamo u poseban slucaj (zato onaj short if u return liniji).
Druga varijanta je da broj nije nula, tj veci od nje (tacnije njegova apsolutna vrednost). Tu imamo dve operacije: ceil (zaokruzuje broj na prvi sledeci ceo broj), i dodavanje broja jedan na broj koji "merimo". Zasto dodajemo 1? Zato sto je log10(10) jedan, a treba da vrati 2, a to ce se desiti tek sa brojem 11, nakon zaokruzivanja (istom logikom 100 i 101, 1000 i 1001 itd). Zasto zaokruzujemo na sledeci ceo broj? Zato sto npr. log10 od 123 (utvrdjujemo duzinu broja 122) iznosi 2.0899051114393976 a program treba da vrati 3 kao broj cifara. "Normalno" zaokruzivanje bi taj broj zaokruzilo na 2, sto je netacno, a nije ni moguce jednostavno dodati 1 jer bi onda za broj 9 vracao 2 kao broj cifara (jer prethodno dodajemo 1 broju 9, dobijamo 10, njegov log10 je 1 i plus 1 je 2).
|
|
|
|
|