#z1079. 数字变化游戏

数字变化游戏

题目描述

小T 最近迷上了数字游戏,对于游戏中数字之间的变化非常着迷。比如给定一个数字 a,只要在 a 上增加一个 1,或者乘上一个 2,那么这个数字的变化将飞起。当然为了不无休止地变化下去,游戏还给出了一个整数 b。数字游戏的目的,就是为了让 a 通过最少的变化次数后,其数值能够等于 b。

作为小T 的同学,他希望你能够和他一起参与到这场数字游戏中。游戏过程如下:

1、给定一个数字 a,a 初始为 0;

2、你可以给数字 a 加上一个 1,或者乘上一个 2;

3、重复步骤二,直到 a 的数值恰好等于 b。

输入格式

一行一个整数 b。

输出格式

一行,描述 a 变化到 b 所使用的每一个数字,数字之间用空格隔开。

输入输出样例

输入样例 #1

1024

输出样例 #1

1 2 2 2 2 2 2 2 2 2 2

输入样例 #2

2653

输出样例 #2

1 2 2 1 2 2 2 1 2 2 1 2 1 2 1 2 2 1

样例说明 #1

1024 = 2^10,即从 1 开始连续乘 10 次 2,故输出 1 后面跟 10 个 2。

样例说明 #2

2653 的二进制为 101001011101,从最高位开始按位构造:最高位先 +1,之后遇到 1 就输出「2 1」(乘 2 再加 1),遇到 0 就输出「2」(只乘 2)。

说明/提示

数据范围

对于 20% 的数据,1 ≤ b ≤ 1024。

对于 40% 的数据,1 ≤ b ≤ 2^26。

对于 100% 的数据,1 ≤ b ≤ 2^62。