#include #include void stampanje_bitova(unsigned x) { unsigned vel = sizeof(unsigned)*8; unsigned maska; for(maska = 1 << (vel-1); maska; maska >>= 1) putchar(x & maska ? '1' : '0'); putchar('\n'); } int broj_petica(unsigned int x) { unsigned maska1 = 5; unsigned maska2 = 2; int br=0; for(; maska1; maska1 <<= 3, maska2 <<= 3) if((x & maska1) == maska1 && (x & maska2) != maska2) br++; /* Oktalni zapis binarne reprezentacije broja x se deli na grupe po tri => maska1 = 5 (101). U prolazu kroz petlju poredicemo do petice smo dosli u slucaju 101 & 101 = 101. Medjutim, i 111 & 101 daje 101, zbog toga moramo da iskljucimo ovaj slucaj pomocu maska2 = 2 (010). Sada izbacivanjem slucaja 111 & 010 = 010 dolazimo do prave pojave petice. */ return br; } void main() { unsigned int x; scanf("%u", &x); stampanje_bitova(x); printf("%d\n", broj_petica(x)); return 0; }