简单计算
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; }