m个64位整型数组成一个数组,依次算出每个数按2进制存储时" 1 "的个数
num[i]&(num[i]-1) 这个可以依次去掉一个1
win7 visual c++ 6.0 cl命令编译通过
/*
2010年5月30日
buptanbiao
bitNumber2.cpp
*/
//针对vc编译器的情况
#include<iostream>
using namespace std;
int main(void)
{
int m;
cin>>m;
//存贮m个整数
__int64 *num = new __int64[m];
//存储数列
for (int i=0;i<m;i++)
{
scanf("%I64d",&num[i]);
}
//存贮对应整数的a值,程序运行结束m个整数对应数值存贮在a相应分分量中
int *a = new int[m];
for (i=0;i<m;i++)
{
a[i]=0;
}
//对位数进行计算
for (i=0;i<m;i++)
{
while (num[i]!=0)
{
a[i]++;
num[i]=num[i]&(num[i]-1);//此法要记
}
}
//显示
for (i=0;i<m;i++)
{
cout<<a[i]<<endl;
}
return 0;
}