Broj cifara celog broja

1

Broj cifara celog broja

offline
  • 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.
offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14828
  • 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.



offline
  • 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.

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14828
  • 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. Very Happy

offline
  • 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.

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14828
  • Gde živiš: Niš

Nisam siguran šta bi postigao naredbom iznad.

Takođe, algoritam je potpuno isti ma koji jezik da je u pitanju. Very Happy

offline
  • 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)

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14828
  • 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. Very Happy Ovo je čist školski primer.

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3763
  • 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 Wink

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).

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14828
  • Gde živiš: Niš

Napisano: 21 Okt 2014 2:03

I šta kada unesemo 999, ili bilo koji ovakav granični slučaj? + 1 je u prvoj liniji višak. Very Happy

Dopuna: 21 Okt 2014 2:06

Inače, zanimljiv pristup. Very Happy Znaš li možda kako se tačno izračunava logaritam? Interesuje me čisto zbog složenosti. Very Happy

Ko je trenutno na forumu
 

Ukupno su 3632 korisnika na forumu :: 81 registrovanih, 6 sakrivenih i 3545 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 20624 - dana 04 Apr 2026 04:18

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 4thFlavian, A.R.Chafee.Jr., AleksSE, ALFASPORTIVO, Asparagus, BasCelik, Bbbggg1979, Belac91, Ben Roj, bigbear, Bobrock1, boj.an, bojank, BORUTUS, BOXRR, bunker, Bvp, Chainsaw, d.arsenal321, dane007, DeerHunter, Despot Đurađ, Draganeli, dulleo, eulereix, Giskard, Gogi_avio, halkin gol, Homislav, HrcAk47, Igrutinovic, IQ116, ivan_8282, jalos, Jester, Jozo74, kikisp, laganini123, Litostroton, manda87, mercedesamg, Milan A. Nikolic, mile.ilic75, milenko crazy north, Milos1987, narandzasti, nebkv, Nemanja.M, Nobunaga, operniki, Oscar, pedjolino76, pein, Pekman, Pilence, Polifon, proka89, Pururin, Ray1973, RD84, RED4G-304, sajorg, SD izvidjac, shota91, ShtagodShtagod, Sonic, srđan, stegonosa, Tafocus, tajvankanasta, they live, tmanda323, Tomo988, tooooom, TRZH92, tuf, vathra, virked, voja64, ZetaMan, zgoljo