题目描述:
给定一个正整数n,要求输出对应的二进制数中所有数码‘1’的位置。注意最低位为第0位。例如13的二进制形式为1101,因此数码1的位置为:0,2,3.
输入描述:
输入文件中的第一行为一个正整数d,表示输入文件中测试数据的个数,1<=d<=10,接下来有d个测试数据。每个测试数据占一行整数n,1<=n<=10^6.
输出描述:
输出包括d行,即输入文件中的每个测试数据,输出一行。第i行,1<=i<=d,以升序的顺序输出第i个测试数据中的整数的二进制形式中所有数码1的位置,位置之间有一个空格,最后一个位置后面没有空格。
样例输入:
2
13
127
样例输出:
0 2 3
0 1 2 3 4 5 6
实现代码:
View Code
#include
<
stdio.h
>
#include < stdlib.h >
int main()
{
int i, d; // d为输入文件中测试数据的个数,
int flag; // 判断是第一个数前不输出空格
scanf_s( " %d " , & d);
for (i = 0 ; i < d; i ++ )
{
int n, pos = 0 ; // n为输入的整数,pos为计数器
scanf_s( " %d " , & n);
flag = 0 ;
while (n != 0 )
{
if (n % 2 == 1 )
{
flag ++ ;
if (flag == 1 )
{
printf( " %d " , pos);
}
else
{
printf( " %d " , pos);
}
}
n = n / 2 ;
pos ++ ;
}
}
return 0 ;
}
#include < stdlib.h >
int main()
{
int i, d; // d为输入文件中测试数据的个数,
int flag; // 判断是第一个数前不输出空格
scanf_s( " %d " , & d);
for (i = 0 ; i < d; i ++ )
{
int n, pos = 0 ; // n为输入的整数,pos为计数器
scanf_s( " %d " , & n);
flag = 0 ;
while (n != 0 )
{
if (n % 2 == 1 )
{
flag ++ ;
if (flag == 1 )
{
printf( " %d " , pos);
}
else
{
printf( " %d " , pos);
}
}
n = n / 2 ;
pos ++ ;
}
}
return 0 ;
}