CF1560D Make a Power of Two

题目描述

给定一个整数 $n$。每次操作,你可以进行以下两种操作之一: - 删除该数的任意一位数字(允许操作前数字只有一位,操作后变成“空”); - 在该数的右侧添加一位数字。 操作可以以任意顺序、任意次数进行。 注意,如果删除某一位后,数字出现前导零,这些前导零不会被自动删除。例如,从 $301$ 删除数字 $3$,结果是 $01$(不是 $1$)。 你需要用最少的操作次数将该数变为任意一个 $2$ 的幂(即存在整数 $k$($k \ge 0$),使得结果等于 $2^k$)。最终得到的数字不能有前导零。 例如,考虑 $n=1052$。答案为 $2$。首先在右侧添加一位数字 $4$(结果为 $10524$),然后删除数字 $5$,结果为 $1024$,它是 $2$ 的幂。 再如,$n=8888$。答案为 $3$。连续三次删除任意一个 $8$,结果为 $8$,它是 $2$ 的幂。

输入格式

第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。接下来有 $t$ 行,每行包含一个整数 $n$($1 \le n \le 10^9$)。

输出格式

对于每个测试用例,输出一行一个整数 $m$,表示将该数变为任意一个 $2$ 的幂所需的最少操作次数。

说明/提示

第一个和第二个测试用例的答案已在题目描述中给出。 第三个测试用例,只需在右侧添加数字 $4$,数字 $6$ 就变成了 $64$。 第四个测试用例,可以先在右侧添加数字 $8$,再删除 $7$ 和 $5$,最终得到 $8$。 第五和第六个测试用例,原数已经是 $2$ 的幂,因此不需要任何操作。 第七个测试用例,可以先删除数字 $3$(结果为 $01$),再删除数字 $0$(结果为 $1$)。 由 ChatGPT 4.1 翻译