1 typedef unsigned char uchar; 2 typedef unsigned int uint; 3 4 void Foo (uchar num, uint idata *x); 5 void Solve (uint idata *x); 6 void Count (uchar u, uint idata *x); 7 uchar Ones (uint x); 8 9 void main (void) 10 { 11 uint idata x = 0xf0f0; 12 Foo (6, &x); 13 Solve (&x); 14 } 15 16 void Foo (uchar num, uint idata *x) 17 { 18 Count (num + 3, x); 19 } 20 21 void Count (uchar u, uint idata *x) 22 { 23 for (; u != 0; u--) 24 { *x = *x ^ (uint) u; 25 } 26 } 27 28 void Solve (uint idata *x) 29 { 30 uchar i, k; 31 for (i = 0; i < 8; i++) 32 { 33 k = Ones (*x); 34 if (k == 0) break; 35 Count (k, x); 36 } 37 } 38 39 uchar Ones (uint x) 40 { 41 uchar v = 0; 42 while (x) 43 { 44 if (x & 1) v ++; 45 x >>= 1; 46 } 47 return v; 48 }