题单练习 位运算

A6465 | 子集枚举

时间限制1s
内存限制128MB
通过 / 提交0/0

题目描述

给定一个非负整数 $N$。请按从小到大的顺序输出所有满足以下条件的非负整数 $x$。

  • 将 $x$ 和 $N$ 写成二进制表示时,$x$ 中为 $1$ 的那些二进制位(位置)的集合,必须是 $N$ 中为 $1$ 的那些二进制位(位置)的集合的子集。

  • * 也就是说,对任意非负整数 $k$,如果 $x$ 在 $2^k$ 位上的数字是 $1$,那么 $N$ 在 $2^k$ 位上的数字也必须是 $1$。


    数据范围


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

输入格式

输入内容由标准输入法提供,格式如下


$N$

输出格式

将答案按升序打印为十进制整数,每行一个。

输入输出样例

输入 #1
11
输出 #1
0
1
2
3
8
9
10
11
输入 #2
0
输出 #2
0
输入 #3
576461302059761664
输出 #3
0
524288
549755813888
549756338176
576460752303423488
576460752303947776
576461302059237376
576461302059761664
C++ 编辑器
输入
输出