解析:  给定的某数,算出它分别用10进制和16进制表达式作为2进制的所有为1的数量。

   10进制的2进制为要判断太简单了,只要不断加上除2的余数就行,作为16进制时更简单,每个数字都有对应的4个二进制数,列表就行。

 1 #include <stdio.h>
 2 static int fun10(int x);
 3 static int fun16(int x);
 4 int a[10] = {0,1,1,2,1,2,2,3,1,2};
 5 int main()
 6 {
 7     int a, n;
 8     scanf("%d", &a);
 9     while(a--){
10         scanf("%d", &n);
11         printf("%d %d\n", fun10(n), fun16(n));
12     }
13     return 0;
14 }
15 static int fun10(int x)
16 {
17     int num = 0;
18     while(x){
19         num += x % 2;
20         x /= 2;
21     }
22     return num;
23 }
24 static int fun16(int x)
25 {
26     int num = 0;
27     while(x){
28         num += a[x%10];
29         x /= 10;
30     }
31     return num;
32 }