注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

告别迷茫

梦想与现实的差距,就是我们生活的意义。因为我们有差距,我们才会一直积累,在努力。

 
 
 

日志

 
 

二 进 制 数  

2014-03-17 23:27:49|  分类: STL ACM |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
给出一个正整数 n,打印出它的二进制中所有 1 的位置。二进制中最低位的位置是 0.
举例
正整数 13 的二进制(1101)中 1 的位置是 0,2,3。
任务
编写一个程序来处理每个数据:
先读入一个正整数 n,再计算这个正整数的二进制中 1 的位置,打印结果。
2.输入描述
输入数据的第一行是一个正整数 d,表示这个数据集中正整数的个数,1≤d ≤10。数
据集列在 d 的下面。每个数据集由一个整数 n(1≤n≤106)组成,且放在一行上。
3.输出描述
输出应当有 d 行,一行是一个数据集处理的结果。
第 i 行,1≤i≤d,应当包含该数据的二进制的 1 的位置,位置是按递增顺序排列,中
间用一个空格隔开。
4.输入样例
1
13
5.输出样例
0 2 3
本题主要考察十进制到二进制的转换。十进制正整数转换为二进制整数的方法是不断
除 2 取余,而被除数则不断除 2 取整,直到被除数变为 0。把各位余数按相反的顺序连接
起来,正好是该正整数的二进制表示。
本题要求打印一个正整数的二进制中 1 的位置,所以,只要把每位二进制位存入向量
中即可,最后,再在向量中进行处理,这样很省事。

#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
ifstream cin("aaa.txt");
vector<int>v;
int n,a;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a;
v.clear();
for(int j=a;j;j=j/2){
v.push_back(j%2?1:0);
}
int p=0;//第一次输出
for(int k=0;k<v.size();k++)
{
if(v[k]==1)
{
if(p==0)cout<<k;
else cout<<" "<<k;
p=1;}

cout<<endl;
}
return 0;
}


  评论这张
 
阅读(0)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017