# An Easy Problem最简单算法

> 来源：梦飞idc云平台 | 原文：https://www.mfisp.com/10771.html | 发布：2022-09-30 | 更新：2022-09-30 | 分类：建站教程、投稿分享、运维技术

/给定一个正整数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;  
}

 

![An Easy Problem最简单算法](https://www.mfisp.com/wp-content/uploads/2022/01/139c1bf7e6eb677_1_post.jpg)

---
本页由 梦飞idc云平台（https://www.mfisp.com）提供。站点导航见 https://www.mfisp.com/llms.txt
