解析: 给定的某数,算出它分别用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 }