CF1455A.Strange Functions

传统题 时间 2000 ms 内存 256 MiB 3 尝试 1 已通过 1 标签

Strange Functions

题目描述

我们定义一个函数 f(x)f(x)xx 是正整数)如下:将 xx 的十进制表示的所有数字倒序排列,然后去掉前导零。例如,f(321)=123f(321) = 123f(120)=21f(120) = 21f(1000000)=1f(1000000) = 1f(111)=111f(111) = 111

我们再定义另一个函数 g(x)=xf(f(x))g(x) = \dfrac{x}{f(f(x))}xx 也是正整数)。

你的任务如下:对于给定的正整数 nn,计算所有满足 1xn1 \le x \le nxx 中,g(x)g(x) 可能取到的不同值的个数。

输入格式

第一行包含一个整数 tt1t1001 \le t \le 100),表示测试用例的数量。

每个测试用例包含一行,一个整数 nn1n<101001 \le n < 10^{100})。该整数没有前导零。

输出格式

对于每个测试用例,输出一个整数,表示当 xx 取遍 [1,n][1, n] 时,函数 g(x)g(x) 可能取到的不同值的个数。

说明/提示

示例中前两个测试用例的解释:

  1. 如果 n=4n = 4,那么对于每个 1xn1 \le x \le n 的整数,xf(f(x))=1\dfrac{x}{f(f(x))} = 1
  2. 如果 n=37n = 37,那么对于某些 1xn1 \le x \le n 的整数,xf(f(x))=1\dfrac{x}{f(f(x))} = 1(例如 x=23x = 23f(f(x))=23f(f(x)) = 23xf(f(x))=1\dfrac{x}{f(f(x))} = 1);对于其他一些 xxxf(f(x))=10\dfrac{x}{f(f(x))} = 10(例如 x=30x = 30f(f(x))=3f(f(x)) = 3xf(f(x))=10\dfrac{x}{f(f(x))} = 10)。因此,g(x)g(x) 可能取到两种不同的值。

由 ChatGPT 4.1 翻译

样例

5
4
37
998244353
1000000007
12345678901337426966631415
1
2
9
10
26

在线编程 IDE

建议全屏模式获得最佳体验