ZOJ1383_二进制数(Binary Numbers)_Central Europe 2001,Practice

题目描述:

  给定一个正整数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

实现代码:

ContractedBlock.gif ExpandedBlockStart.gif 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 ;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值