xtu p1045 An Easy Problem

描述

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

限制
时间限制: 1000 ms
内存限制: 65536 KB


int two(int x) //统计1出现的次数
{
    int tot=0;
    while(x>0) //模拟短除法
    {
        if(x%2==1) //统计1出现的次数
            tot++;
        x/=2;
    }
    return tot; //返回1出现的次数
}
int main(){
    int m;
    while(scanf("%d",&m),m){ //无限输入
            int a=m+1;
            while(a>m){ //枚举所有大于m的数
                if(two(a)==two(m)){ //如果出现1的次数相同
                    printf("%d\n",a); //直接输出并结束
                    break;
                }
                else{ //否则就继续找
                    a++;
                }
            }
        }
    return 0;
}
发布了12 篇原创文章 · 获赞 0 · 访问量 248

猜你喜欢

转载自blog.csdn.net/qq_42906209/article/details/104483899