#include<iostream>
using namespace std;
int main()
{
int n,k,s;
int i,j,sum;
int flag1,flag2;
int a[100],b[100];
while(cin>>n)
{
if(n==0)
break;
flag1=sum=s=i=j=0,flag2=1;
while(n)
{
a[i++]=n%2;
n=n/2;
}
k=(i--);
while(i>=0)
{
b[j++]=a[i--];
}
for(j=k-1;j>=0;j--)
{
if(b[j]==0&&flag1==0)
continue;
if(b[j]==1)
{
flag1=1;
b[j]=0;
s++;
}
else
{
b[j]=1;
flag2=0;
break;
}
}
for(j=k-1;;j--)
{
if(b[j]!=1)
{
if(!(--s))break;
b[j]=1;
}
}
for(j=0;j<k;j++)
{
if(b[j]==1)
sum+=1<<k-j-1;
}
cout<<sum+flag2*(1<<k)<<endl;
}
}
poj 2453 An Easy Problem
最新推荐文章于 2022-08-28 15:09:52 发布