HDU 5273 Dylans loves numbers(水题)

时间:2023-03-08 19:19:34

题意:给出一个0≤N≤1018,求其二进制中有几处是具有1的,假设相连的1只算1处,比如1101011就是3处。

思路:一个个数,当遇到第一个1时就将flag置为1;当遇到0就将flag置为0。当遇到1时,flag=0就统计,当flag=1时就不统计。

 #include <bits/stdc++.h>
#define LL long long
using namespace std; int main()
{
int t;
LL n;
cin>>t;
while(t--)
{
cin>>n;
int cnt=,flag=;
while(n)
{
if((n&)==)
{
if(!flag)
{
flag=;
cnt++;
}
}
else
flag=;
n>>=;
}
printf("%d\n",cnt);
}
return ;
}

AC代码