题目描述
如果一个正整数在十进制下的所有数位都相同,小 A 就会觉得这个正整数很优美。例如,正整数 6 的数位都是 6,所以 6 是优美的。正整数 99 的数位都是 9,所以 99 是优美的。正整数 123 的数位不都相同,所以 123 并不优美。
小 A 想知道不超过 n 的正整数中有多少优美的数字。你能帮他数一数吗?
输入格式
一行,一个正整数 n。
输出格式
一行,一个正整数,表示不超过 n 的优美正整数的数量。
输入输出样例
输入 #1
6
输出 #1
6
输入 #2
2025
输出 #2
28
说明/提示
对于所有测试点,保证 1≤n≤2025。
【考察内容】数位拆分、枚举、循环
【解析】该问题的核心在于判断每个正整数的各位数字是否完全相同。程序通过循环枚举从1到n的每一个数,对每个数提取其个位数字作为基准,再逐位检查其余数字是否与之相等。若全部相同,则计数器加一。算法时间复杂度为O(n×d),其中d为数字的位数,符合算法要求的时间复杂度。
#include <algorithm>
#include <cstdio>
using namespace std;
int n, ans;
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
int v = i % 10, t = i / 10, chk = 1;
while (t) {
if (t % 10 != v) chk = 0;
t /= 10;
}
ans += chk;
}
printf("%d\n", ans);
return 0;
}