定义回顾:把正整数写成二进制(无前导 0)。若其中 1 的个数等于 0 的个数,则称为完美数。
设总位数为 L,则必须有 L 为偶数,且 #1 = #0 = L/2。同时最高位必须为 1(无前导 0)。
L=2k,并且最高位为 1、总 1 的个数为 k。2k,最小的完美数是把除最高位外的 (k-1) 个 1 全放在最低位:
形如 1 0^k 1^(k-1),数值即给定一个正整数的二进制表示(不含前导 0 )中,1 的个数为 n ,0 的个数为 m 。
若满足 m=n
则称该整数为完美数。
现给定一个整数 x ,请找出大于等于 x 的最小完美数。
【名词解释】
二进制表示:二进制表示指将一个正整数按基数 2 形式书写,不含前导零。例如,5 的进制表示为 (101)2 。
完美数:完美数指其二进制表示中 1 的个数与 0 的个数相等。
每个测试文件均包含多组测试数据。第一行输入一个整数 T(1≤T≤105) 代表数据组数,每组测试数据描述如下:
每行输入一个整数 x(1≤x≤109) 。
对于每,组测试数据,新起一行,输出一个整数,表示不小于 x 的最小完美数。
输入
6
1
2
3
4
5
6
输出
2
2
9
9
9
9
说明
当 x=1 时,最小完美数为 2 (二进制 (10)2 ,中 1,0 均为 1 )。
当 x=2 时,最小完美数为 2 。
当 3≦x≦6 时,最小完美数为 9 (二进制 (1001)2,中 1,0 均为 2 )。
输入
3
8
9
10
输出
9
9
10