P1178 - 一个简单的问题

题目描述

众所周知,计算机中存储的数据是二进制形式。我们现在讨论的问题是关于正整数及其二进制形式的。

给定一个正整数$I$,你的任务是找出一个整数$J$,它是大于$I$的最小整数,并且其二进制形式中 '1' 的个数与$I$的二进制形式中 '1' 的个数相同。

例如,如果给定“78”,我们可以写出它的二进制形式“1001110”。该二进制形式中有4个 '1'。大于“1001110”且同样包含4个 '1' 的最小整数是“1010011”,即“83”,所以你应该输出“83”。

输入格式

每行一个整数,表示 $I$(1 <= I <= 1000000)。

一行包含数字“0”表示输入结束,该行无需处理。

输出格式

每行一个整数,表示$J$。

输入输出样例 #1

输入 #1

1
2
3
4
78
0

输出 #1

2
4
5
8
83

说明/提示

$50%$ 的数据满足:测试数据组数 <= 100

$100%$ 的数据满足:测试数据组数 <= $10^6$

测试点数目

共10个测试点,每个测试点10分

时间与内存限制

每个测试点时间:1000ms(1.0s),内存:256MiB

输入输出模式

本OJ支持两种输入输出模式

1. 标准输入输出模式:
直接从标准输入和标准输出读写数据,不需要使用freopen进行文件输入输出重定向
2. 文件输入输出模式(国内信奥赛输入输出模式):
从文件中读写数据,需要使用freopen进行输入输出重定向
本题输入文件名为:P1178.in,输出文件名为:P1178.out