#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$ 个位置。
输入
从标准输入读取数据,格式如下:
输出
按升序打印答案,每个输出占一行。
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$ 位有符号整数。