您的位置:首页 > 其它

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: