给定一个数字,确定它是否为折叠数字。
折叠数是一个数字,如果您将其用二进制表示形式并将其“对折”成一半,那就是将数字的前半部分与后半部分的XNOR乘以XNOR乘以相反的数字得到的结果,您将得到零。
如果该数字的二进制位数为奇数,则其中间数字必须为1,并且在折叠时将被忽略。
由于这可能会使您感到困惑,因此我举一些例子:
178
178的二进制表示为
10110010
要折叠它,我们首先将其切成两半
1011 0010
我们下半年倒转
1011
0100
我们对这两个部分进行异或运算:
0000
这是零,所以这是一个折叠数。
1644年
1644的二进制表示为
11001101100
要折叠它,我们首先将其切成两半
11001 1 01100
中间位是1,因此我们将其丢弃。
11001 01100
我们下半年倒转
11001
00110
我们对这两个部分进行异或运算:
00000
这是零,所以这是一个折叠数。
4254
4254的二进制表示为
1000010011110
要折叠它,我们首先将其切成两半
100001 0 011110
中间位是0,因此这不是折叠数。
任务
您的任务是接受一个正数,如果该数字是可折叠的,则返回一个真值;如果不是,则返回虚假的值。这是代码高尔夫球,因此请尽量减少字节数。
测试用例
以下是前99个折叠数字:
[1, 2, 6, 10, 12, 22, 28, 38, 42, 52, 56, 78, 90, 108, 120, 142, 150, 170, 178, 204, 212, 232, 240, 286, 310, 346, 370, 412, 436, 472, 496, 542, 558, 598, 614, 666, 682, 722, 738, 796, 812, 852, 868, 920, 936, 976, 992, 1086, 1134, 1206, 1254, 1338, 1386, 1458, 1506, 1596, 1644, 1716, 1764, 1848, 1896, 1968, 2016, 2110, 2142, 2222, 2254, 2358, 2390, 2470, 2502, 2618, 2650, 2730, 2762, 2866, 2898, 2978, 3010, 3132, 3164, 3244, 3276, 3380, 3412, 3492, 3524, 3640, 3672, 3752, 3784, 3888, 3920, 4000, 4032, 4222, 4318, 4462, 4558]
0
,所以没有。(这可能是具有第三工作例如像这虽然值得的。)也是一样的18