bitset类:http://blog.163.com/lixiangqiu_9202/blog/static/53575037201251121331412/
思路:
1.从右往左的第一对01互换位置
2.把右边的所有1都移到最右边
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
bitset<32>pq(n);
int i,j,cnt=0;
for(i=0;i<32;i++)
{
if(pq[i])
cnt++;
if(pq[i]&&!pq[i+1])
{
pq[i]=false;
pq[i+1]=true;
j=i;
break;
}
}
for(i=0;i<cnt-1;i++)
pq[i]=true;
while(i<j)
{
pq[i]=false;
i++;
}
cout<<pq.to_ulong()<<"\n";
}
return 0;
}