题目引入
开始分析之前希望大家可以认真的看一下题。
分析题目发现本题需要掌握的知识点有:
1.十进制转化为二进制,这里我们的方法是连续除以2取余,本题不需要补0;
2.将第一个非零的数转化回十进制;
我们发现对于本题要求转化后的十进制数,实际就是找到第一个非零数的位置j,然后取2的j次方。
AC代码
#include <bits/stdc++.h>
using namespace std;
const int N=105;
int a[105];
int main()
{
memset(a,0,sizeof a);//将a数组清零
int A;
while(1)
{
cin>>A;
if(A==0) break;//如果A等于零就结束循环
int i=0;
while(A>0)//十进制转化二进制
{
a[i]=A%2;
A=A/2;
i++;
}
for(int j=0;j<i;j++)
{
if(a[j]!=0) //寻找第一个非零的数的位置
{
cout<<(int)pow(2,j)<<endl;break;//二进制转化十进制
}
}
}
return 0;
}