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.
"akkor most képzeld el, hogy i 16. 16 & 15 == 0. 16 + 0 == 16"
Akkor most nézd meg jobban, mit adok mihez.
Amúgy ez egy lehetőség a sok közül. Biztos nem tökéletes, de nem is akarom rátukmálni senkire, csak te akarsz belekötni. Csak nem sikerült. Egyetlen helyes észrevétel, hogy negatív számokkal nem foglalkoztam.
"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?"
Már észrevettem, hogy néha elszakad nálad a cérna, de azért próbáld moderálni magad kicsit! Egyrészt a "kritikád" arra alapult, hogy félreértetted a működését. Másrészt én pont oda szoktam figyelni a valódi kritikákra. Személyeskedéssel nem tudom mit akarsz megoldani.
...A tömböt tényleg elszúrtam.
Ettől függetlenül nem díjazom fröcsögést és a személyeskedő beszólásokat. Ha segíteni akarsz, akkor írj normális, civilizált választ, ha csak kötekedni akarsz, akkor inkább sétálj egyet.
Belőlem is a legrosszabbat hozod ki. Na léptem...
"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];}"
i = 16:
i + aKerek[i&15] --> 16 + aKerek[0] --> 16
Nem a tömböt rontottad el, csak simán rossz volt a logikád. A kerekítés tizes számrendszerre működik (igazából ötös, de tizessel egyszerűbb látni), kettő hatványok sosem lesznek tizes számrendszerre esők, tehát ilyen egyszerű & kifejezéssel nem megoldható a probléma.
Nem személyeskedtem, rámutattam egy problémára, majd amikor arrogánsan visszafostál valamit, megkérdeztem, hogy ugyan miért nem nézed meg a kódot, ha már kritikát kaptál rá egy hozzáértőtől, HÁTHA nincs igazad. Na, EZ már kezd személyeskedés lenni, de lássuk be, rászolgáltál.
vagy csak sima maradékos osztással? oké fapados, de ez is egy megoldás:
a számot osztod 5-tel, 0, 1, 2 maradék esetén kivonod a maradékot. 3, 4 maradék esetén meg hozzáadsz 1-et vagy kettőt
#5 vagyok.
kerek = ((szam + 2)/5)*5;
Aki ettől gyorsabbat ír jelentkezzen.
Ha gép elé érek, leteszteljük ;)
Amúgy ugyanezt írtam én is.
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!