1 条题解
-
0
自动搬运
来自洛谷,原作者为

chen_zhe
Aya 敲可爱的~搬运于
2025-08-24 21:16:30,当前版本为作者最后更新于2025-08-07 16:01:59,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
欢迎报名洛谷网校,期待和大家一起进步!
这道题目的目标很明确:在一个从 1 到 的数字范围里,找出小杨的幸运数字 一共出现了多少次。我们需要注意的是,一个数字里如果多次出现 ,比如数字 里有两个 ,那么每一次都要被计算在内。
要解决这个问题,最直接、最容易理解的方法就是对从 1 到 的每一个整数进行彻底的“检查”。我们可以设计一个程序,用一个循环从 1 开始,依次遍历到 。对于每一个正在被检查的数字,我们需要想办法把它拆分成一个个独立的数位,然后判断这些数位中有没有我们正在寻找的幸运数字 。
那么,如何拆分一个数字呢?这里有一个非常经典的数学小技巧。我们可以对这个数字反复进行“取余”和“整除”操作。例如,对于数字 ,我们用它对 取余(
123 % 10),就能得到它的个位数 。然后,我们再用它整除以 (123 / 10),数字就变成了 。我们继续对 进行同样的操作,取余得到 ,整除后剩下 。最后对 操作,得到 ,整除后变为 。当数字变为 时,我们就成功地把它的每一位都分离出来了。在拆分的过程中,每当我们分离出一个数位,就将它与幸运数字 进行比较。如果它们相等,我们就让一个专门的计数器加一。这一部分的代码是:int cur = i; while (cur > 0) { int d = cur % 10; if (d == k) ans++; cur = cur / 10; }我们将这个拆分过程应用到从 1 到 的每一个数上。当外层循环遍历完从 1 到 的所有数字后,这个计数器里记录的总数,就是我们最终要找的答案。
- 1
信息
- ID
- 10491
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 1
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者