Central Europe 2001, Practice
题目大意:给你一个数N,输出N的二进制形式上为1的数位(从右至左)
思路:每次(N&1)判断末尾是否为1,为1则存入数组ans[]中,不为1则
不存,之后数位自增,N向右移一位,继续判断末尾……
#include<stdio.h>
#include<string.h>
int ans[110];
int main()
{
int N,T;
scanf("%d",&T);
while(T--)
{
memset(ans,0,sizeof(ans));
scanf("%d",&N);
int num = 0,count = 0;
while(N)
{
if(N&1)
{
ans[num++] = count;
count++;
}
else
{
count++;
}
N >>= 1;
}
for(int i = 0; i < num; i++)
{
if(i!=num-1)
printf("%d ",ans[i]);
else
printf("%d\n",ans[i]);
}
}
return 0;
}
HDU1390_Binary Numbers【水题】【位运算】
原文:http://blog.csdn.net/lianai911/article/details/41525829