每日一练:完美整数

228 阅读1分钟

问题描述

一个整数如果由相同数字构成,可以称为完美整数;比如说1、11、333就是完美整数,12、19、101就是不完美的整数。 现在想知道,在区间 [x, y] 中有多少个整数是完美整数。

输入格式

每个样例有一行,是整数 xy;(1 ≤ x ≤ y ≤ 10^9)

输出格式

每一个样例一行,是整数 m,表示区间 [x, y] 中有 m 个整数是完美整数。

输入样例1

1 10

输出样例1

9

输入样例2

2 22

输出样例2

10

数据范围

1 ≤ t ≤ 1000 1 ≤ x ≤ y ≤ 10^9

解题:

function countPerfectNumbers(x, y) {
    let count = 0; // 记录完美整数的数量
  
    // 枚举从 1 到 9 的每一个基数
    for (let digit = 1; digit <= 9; digit++) {
      let num = digit; // 当前完美整数
      // 不断生成 1 位到 9 位的完美整数
      while (num <= y) {
        if (num >= x) {
          count++; // 如果完美整数在 [x, y] 范围内,计数
        }
        num = num * 10 + digit; // 扩展生成下一位完美整数
      }
    }
  
    return count;
  }


function main() {
    // Add your test cases here
    console.log(countPerfectNumbers(1, 10) === 9);
    console.log(countPerfectNumbers(2, 22) === 10);
}

main();

20240924103332.jpg