#AT2311. C - Submask

C - Submask

当前没有测试数据。

C - 子掩码

得分:$300$ 分

问题描述

给定一个非负整数 $N$。按升序打印满足以下条件的所有非负整数 $x$。

  • 在 $x$ 的二进制表示中包含 $1$ 的位的集合是 $N$ 的二进制表示中包含 $1$ 的位的集合的子集。
    • 也就是说,对于每个非负整数 $k$,如果 $x$ 在 "$2^k$ " 位置的数字是 $1$, 那么 $N$ 在 "$2^k$ " 位置的数字也是 $1$。

限制条件

  • $N$ 是一个整数。
  • $0 \le N < 2^{60}$
  • 在 $N$ 的二进制表示中,至多包含 $15$ 个位置。

输入

从标准输入读取数据,格式如下:

NN

输出

按升序打印答案,每个输出占一行。


11
0
1
2
3
8
9
10
11

$N$ 的二进制表示为 $11_{(10)} = 1011_{(2)}$。
满足条件的非负整数 $x$ 为:

  • $0000_{(2)}=0_{(10)}$
  • $0001_{(2)}=1_{(10)}$
  • $0010_{(2)}=2_{(10)}$
  • $0011_{(2)}=3_{(10)}$
  • $1000_{(2)}=8_{(10)}$
  • $1001_{(2)}=9_{(10)}$
  • $1010_{(2)}=10_{(10)}$
  • $1011_{(2)}=11_{(10)}$

0
0

576461302059761664
0
524288
549755813888
549756338176
576460752303423488
576460752303947776
576461302059237376
576461302059761664

输入的数据可能无法放入 $32$ 位有符号整数。