这道题是数十进制转二进制后有几个1,这边提供两种方法,一种是十进制除二判断奇偶累计1的个数(借用兄嘚的代码),一种是按位与的写法(俺最近学的哈哈哈)。
下面是原题:
小明这几天非常无聊,于是乎他又给自己找了一个乐子,他随手写一个十进制的数字,然后转换成二进制,数一数二进制中有几个1,请编写程序完成这个过程,注意看看输入、输出格式。
方法一:除二判断奇偶累加兄弟的c++代码
#include<cmath>
using namespace std;
typedef long long ll;
int main()
{
int t,n;
cin>>t;
while(t--)
{
int cnt=0;
cin>>n;
while(n/2)
{
if(n%2==1)
cnt++;
n=n/2;
}
if(n%2==1)
cnt++;
cout<<cnt<<endl;
}
return 0;
}
方法二:按位与我的C语言代码
int main()
{
int a,b,i,j,n,count=0;
scanf("%d",&n);
while(n--)
{
count=0;
scanf("%d",&a);
while(a)
{
a=a&(a-1);
count++;
}
printf("%d\n",count);
}
return 0;
}
/*核心代码语句:(a=a&(a-1)): 让这个数n与n-1按位与再赋给n,它的意义是,从低位到高位,n的二进制位中第一次出现1的位置变成0(循环),直到n的二进制位上的1全变成0(此时n=0),循环终止。*/