/給定一個正整數N,求最小的、比N大的正整數M,使得M與N的二進制表示中有相同數目的1。
//
//舉個例子,假如給定的N為78,其二進制表示為1001110,包含4個1,那么最小的比N大的并且二進制表示中只包含4個1的數是83,其二進制是1010011,因此83就是答案。
//
//【輸入】
//輸入若干行,每行一個數n(1≤n≤1000000),輸入"0"結束。
//
//【輸出】
//輸出若干行對應的值。
//
//【輸入樣例】
//1
//2
//3
//4
//78
//0
//【輸出樣例】
//2
//4
//5
//8
//83
#include<iostream>
using namespace std;
int n;
int cal(int num) {
? ? int ans = 0;
? ? while (num) {
? ? ? ? ans++;
? ? ? ? num &= num - 1;
? ? }
? ? return ans;
}
int main() {
? ? while (cin >> n && n) {
? ? ? ? int tmp = n;//一般不動原來那個數
? ? ? ? while (++tmp) {//讓一個數一直加1
? ? ? ? ? ? if (cal(tmp) == cal(n)) {
? ? ? ? ? ? ? ? cout << tmp<<endl;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? return 0;
}