简单计算
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
某天,XX 给YY 出了一道题,题目是:
给出n 个十进制的数,找出这n 个数的二进制表示中1 的个数最少的数。
由于YY 的计算能力很差,所以他想让你帮他写个程序来计算出来。
输入
输入的第一行为一个正整数T(1 ≤T≤20),代表测试数据组数。
对于每组测试数据:
输入的第一行为一个正整数n (1 ≤ n ≤105);
第二行为n 个正整数A1、A2、… 、An(1 ≤ Ai≤ 109)。
输出
每组数据输出一行,先输出数据组数,再输出二进制中含1 最少的数,如果有多个数符合条件,输出最小的那个。具体输出格式见样例输出。
示例输入
2 5 3 2 4 5 6 4 3 4 2 5
示例输出
Case 1: 2 Case 2: 2
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int a[100004];
int BitCount2(unsigned int n)
{
unsigned int c =0 ;
for (c =0; n; ++c)
{
n &= (n -1) ; // 清除最低位的1
}
return c ; //返回 该十进制数转换为二进制后中1的个数
}
int main()
{
int t;
int i,j, k=1;
int n;
int dd, min, cc;
cin>>t;
while(t--)
{
cin>>n;
cin>>a[0];
min=BitCount2( a[0] );
cc=a[0];
for(i=1; i<n; i++)
{
cin>>a[i];
dd=BitCount2(a[i]);
if(dd<min )
{
min=dd;
cc=a[i];
}
else if(dd==min)
{
if(a[i]<cc)
cc=a[i];
}
}
cout<<"Case "<<k++<<": "<<cc<<endl;
}
return 0;
}