题目:给你一个数字,统计他是十进制数和十六进制数时转化为二进制后每个位上1的个数。
分析:简单题。先按十进制算,然后统计每位上的数字转化成二进制即可。(十六进制每位对应4个二进制位)
注意:用cin无限WA,scanf就AC了,o(╯□╰)o
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
int bits( int a )
{
int count = 0;
while ( a ) {
count += a%2;
a >>= 1;
}
return count;
}
int main()
{
int n,m,b1,b2;
while ( ~scanf("%d",&n) )
while ( n -- ) {
scanf("%d",&m);
b1 = bits( m );
b2 = 0;
while ( m ) {
b2 += bits( m%10 );
m /= 10;
}
printf("%d %d\n",b1,b2);
}
return 0;
}