1223:An Easy Problem
【题目描述】
给定一个正整数N𝑁,求最小的、比N𝑁大的正整数M𝑀,使得M𝑀与N𝑁的二进制表示中有相同数目的11。
举个例子,假如给定的N𝑁为7878,其二进制表示为10011101001110,包含44个11,那么最小的比N𝑁大的并且二进制表示中只包含44个11的数是8383,其二进制是10100111010011,因此8383就是答案。
【输入】
输入若干行,每行一个数n𝑛(1≤n≤10000001≤𝑛≤1000000),输入"00"结束。
【输出】
输出若干行对应的值。
【输入样例】
1 2 3 4 78 0
【输出样例】
2 4 5 8 83
代码如下:
#include<iostream>
using namespace std;
int g(int n)
{ int s=0;
while(n!=0)
{ if (n%2==1) s++;
n/=2;
}
return s;
}
int main()
{ int n;
while(cin>>n,n!=0)
{
int t=g(n);
int m=n+1;
while(g(m)!=t) m++;
cout<<m<<endl;
}
return 0;
}