Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
Gost
|
|
[Vrh] |
|
ahri Forumaš(ica)


Pridružen/a: 19. 11. 2003. (23:16:07) Postovi: (193)16
|
|
[Vrh] |
|
ahri Forumaš(ica)


Pridružen/a: 19. 11. 2003. (23:16:07) Postovi: (193)16
|
Postano: 2:00 pon, 5. 12. 2005 Naslov: |
|
|
moze se i for petljom po bitovima broja...
[code:1]
#include <stdio.h>
int main() {
int i,n;
scanf("%d", &n);
for (i=31;(i>=1) && (n & (1<<i))==0;i--);
for (;i>=0;i--) {
printf("%d", ((n & (1<<i))>0)?1:0);
}
printf("\n");
return 0;
}
[/code:1]
Razjasnjenje:
Broj u memoriji racunala ima 32 bita (31..0).
1) U prvoj for petlji idemo od najviseg bita prema najnizem i trazimo prvog koji je razlicit od nule (tako da ne ispisujemo suvisne nule). Dodatan je uvjet da (i>=1) za slucaj da je broj jednak nuli, pa nece imati niti jedan bit jednak jedinici (i petlja bi otisla u minus!).
2) U drugoj petlji idemo od otkrivenog najviseg bita koji sadrzi jedinicu do zadnjeg te ispisujemo 1 ili 0, ovisno o tome je li taj bit 1 ili 0.
U oba slucaja provjeravamo je li neki bit u broju jedan ili nula na sljedeci nacin:
uzmemo taj broj (n) i ANDamo ga logicki sa brojem 2^i (u Cu se to napise 1<<i).
ako je ta operacija dobila neki broj razlicit od nule, taj broj ima bit na mjestu "i" "u jedinici"
npr, neka je nas broj 10
binarno je on 1010.
trazimo treci bit (imamo bitove 3..0 u nasem zapisu).
dakle, 1010 & 1000 = 1000 sto je razlicito od 0, dakle, nas broj na trecem bitu ima jedinicu.
Andanje sa 1000 je ponistilo sve znamenke osim tamo gdje se nalazi jedinica.
nisam bio bas najjasniji, ali radije me pitajte sto da objasnim :)
moze se i for petljom po bitovima broja...
Kod: |
#include <stdio.h>
int main() {
int i,n;
scanf("%d", &n);
for (i=31;(i>=1) && (n & (1<<i))==0;i--);
for (;i>=0;i--) {
printf("%d", ((n & (1<<i))>0)?1:0);
}
printf("\n");
return 0;
}
|
Razjasnjenje:
Broj u memoriji racunala ima 32 bita (31..0).
1) U prvoj for petlji idemo od najviseg bita prema najnizem i trazimo prvog koji je razlicit od nule (tako da ne ispisujemo suvisne nule). Dodatan je uvjet da (i>=1) za slucaj da je broj jednak nuli, pa nece imati niti jedan bit jednak jedinici (i petlja bi otisla u minus!).
2) U drugoj petlji idemo od otkrivenog najviseg bita koji sadrzi jedinicu do zadnjeg te ispisujemo 1 ili 0, ovisno o tome je li taj bit 1 ili 0.
U oba slucaja provjeravamo je li neki bit u broju jedan ili nula na sljedeci nacin:
uzmemo taj broj (n) i ANDamo ga logicki sa brojem 2^i (u Cu se to napise 1<<i).
ako je ta operacija dobila neki broj razlicit od nule, taj broj ima bit na mjestu "i" "u jedinici"
npr, neka je nas broj 10
binarno je on 1010.
trazimo treci bit (imamo bitove 3..0 u nasem zapisu).
dakle, 1010 & 1000 = 1000 sto je razlicito od 0, dakle, nas broj na trecem bitu ima jedinicu.
Andanje sa 1000 je ponistilo sve znamenke osim tamo gdje se nalazi jedinica.
nisam bio bas najjasniji, ali radije me pitajte sto da objasnim :)
_________________ 
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
Postano: 2:03 pon, 5. 12. 2005 Naslov: |
|
|
Ahri, [url=http://degiorgi.math.hr/forum/viewtopic.php?p=22054#22054]ljudi ne znaju rekurziju[/url]. :shock: :(
Goste, radili smo kako se znamenke ispisu "u rikverc". :-s Umjesto ispisa, ti ih mozes sloziti u novi broj, koji ce imati znamenke starog, ali od zadnje do prve. :) Nakon toga, [b]taj[/b] broj ispises "u rikverc" i to je to! :D
Drugi nacin je da se poigras s duljinom originalnog broja i odgovarajucim potencijama broja 10. 8)
Ahri, ljudi ne znaju rekurziju.
Goste, radili smo kako se znamenke ispisu "u rikverc". Umjesto ispisa, ti ih mozes sloziti u novi broj, koji ce imati znamenke starog, ali od zadnje do prve. Nakon toga, taj broj ispises "u rikverc" i to je to!
Drugi nacin je da se poigras s duljinom originalnog broja i odgovarajucim potencijama broja 10.
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju. 
|
|
[Vrh] |
|
ahri Forumaš(ica)


Pridružen/a: 19. 11. 2003. (23:16:07) Postovi: (193)16
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16
Spol: 
Lokacija: /sbin/init
|
|
[Vrh] |
|
|