Hogy kell a legközelebbi ötösre kerekíteni C nyelven?
Egész számokat kell kerekíteni a legközelebbi öttel osztható számra a következő szabály szerint.
1;2-->alsó tízes
3;4;6;7-->5
8;9-->felső tízes
Néztem interneten ilyeneket, hogy "round", "ceil" meg "floor", de még nem tudtam kibogozni, hogy egyáltalán ezekkel kell-e, és ha igen, akkor hogyan.
szerintem szorozd meg 2-vel, kerekíts 10-re, majd oszd vissza 2-vel
(előző megoldás egyébként jobb, de ezt talán könnyebben megérted)
Adott az input szám. Adj hozzá kettőt, oszd el az inputot 5-el (egész osztás), majd szorozd fel 5-el.
Ennyi az egész.
Sokféle megoldás van, pl:
int aKerek[] = {0,-1,-2,2,1,0,-1,-2,2,1,0,-1,-2,2,1,0}
unsigned int kerek(unsigned int i) {return i+aKerek[i&15];}
Utolsó, ez majdnem jó, de szerintem ezt gondold át: aKerek[i&15];
Én lecserélném egy %10-re.
Amúgy nekem ez tetszik a legjobban, viszont ez már inkább a tapasztaltabb programozó hozzáállása, nem a matekos megközelítés.
"szerintem ezt gondold át: aKerek[i&15];"
Az alsó négy bitet maszkolom ki vele, szóval direkt van így (15=1111b). Ez egy igen gyorsan lefutó művelet. Próbáltam a sebességre figyelni. Sőt, először nem is különbségeket akartam a tömbbe vinni, hanem olyan értékeket, amiket XOR kapcsolatba hozva a számmal, korrigálja az alsó négy bitet. Túlzás? :))
Egyébként nekem az #5-ös megoldás is tetszik. Egyszerű és gyorsan fut. :)
#8 Oké, akkor most képzeld el, hogy i 16. 16 & 15 == 0. 16 + 0 == 16. Helyes ez az algoritmus szerinted, elvégzi a feladatot? Mi van, ha i negatív?
Miért akarod nekem elmagyarázni, hogy mit csinál és mennyire gyors? Miért nézed hülyének a másikat ahelyett, hogy elgondolkondál az kritikán?
A #5 megoldás meg pont az, amit én és már más is javasolt, csak nem hagy a kérdezőre semmit. Pedig nem ártana, ha magától is gondolkodna kicsit.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!