ZOJ 2417
2015-10-18 21:13
232 查看
题意
给出一个十进制数,找出其二进制数,找到其中从低位开始,第一个为1的数,然后把从这个数到最低位组成的二进制数的十进制数写出来思路
尊重十进制数到二进制数的换算方法,然后判断一下是否是到了第一个为1的数从二进制数换算成十进制数利用常规方法,参考我的一篇日志:
参考内容
关于十进制转换为二进制数的介绍:
你以十进制的数除以你所要转换的进制数,把每次除得的余数记在旁边,所得的商数继续除以进制数,直到余数为0时止.例如你要把100转换成八进制: 100/8=12...(余数为4); 12/8=1.....(余数为4); 1/8=0......(余数为1); 然后把相应的余数从低向高顺着写出来,如上的为144,此即为100的八进制表示形式. 十进制转换为十六进制与二进制与前面的转化为八进制相同,如100转换为十六进制: 100/16=6....(余数为4); 6/16=0......(余数为6); 同理则以十六进制表示的100形式为64; 100转换为二进制: 100/2=50....(余数为0); 50/2=25.....(余数为0); 25/2=12.....(余数为1); 12/2=6......(余数为0); 6/2=3.......(余数为0); 3/2=1.......(余数为1); 1/2=0.......(余数为1); 所以100的二进制表示形式为1100100;
这个题我们就只需要做到,找出这个二进制数,然后把它转换为10进制数即可了。附上代码及详细解释
代码
//ZOJ 2417 #include <iostream> using namespace std; int main(){ int n,num[10]; while(cin>>n && n){ int pos =0; while(n){ num[pos] = n%2; n/=2; //这里用来记录二进制数 if(num[pos]==1){ //找到第一个为1的位 int sum=0; //sum用来记录输出值 for(int i=pos;i>=0;i--){ //算出十进制数 sum = sum*2+num[i]; //cout<<num[i]<<" "; } cout<<sum<<endl; break; } pos++; } } return 0; }
相关文章推荐
- Android SQLite 使用总结
- 冒泡法排序
- Hive ERROR: Out of memory due to hash maps used in map-side aggregation
- sizeof浅析——求类的大小
- POJ 2155 Matrix (D区段树)
- java实验三
- 1013 求先序排列
- 使用poi写excel文件
- 白话空间统计十九:热点分析(上)
- WAMP常用环境配置
- ros中使用摄像头
- com.intellij.javaee.oss.admin.jmx.JmxAdminException: com.intellij.execution.ExecutionException idea 导出war 报错
- 百度地图的API接口----多地址查询和经纬度
- iOS UIView 快速修改 frame,
- 大道至简第三章读后感
- HDU4004
- 敏捷测试与传统测试的区别
- 【2015の复活】砝码称重v2
- 【自考】——考后总结
- 腐蚀与膨胀