题目描述
众所周知,在计算机中数据是以二进制的形式存储的。现在给定一个正整数n(1≤n≤1000000),你的任务是找到一个正整数m,m是大于n的最小的那个数,而且要求m和n的二进制形式中1的个数是一样的。
例如,n=78,那么n的二进制为“1001110”,二进制形式中1的个数为4,那么能满足条件的m是83,83二进制数是“1010011”,83是比78大的最小的那个数而且二进制中有4个1。
输入格式
输入包含多组数据,每组数据,一行,一个整数n,当输入为0时表示数据结束。
输出格式
对于每组数据输出一行,一个整数m
输入输出样列
输入样例1
1 2 3 4 78 0
输出样例1:
2 4 5 8 83
【耗时限制】1000ms 【内存限制】128MB
代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<string>
#include<sstream>
#include<queue>
#include<deque>
#include<vector>
#include<stack>
#include<iostream>
using namespace std;
int n,m;
i