在 JavaScript 中查找最近的 Gapful 数


当一个数字满足以下条件时,它是一个 Gapful 数:

  • 它至少有三位数字,并且
  • 它能被由其首位和末位数字组成的数字整除。

例如:

数字 1053 是一个 Gapful 数,因为它有 4 位数字,并且它能被 13 整除。类似地,135 是一个 Gapful 数,因为它有 3 位数字,并且它能被 15 整除。

我们的任务是编写一个程序,返回与我们提供的输入数字最接近的 Gapful 数。

例如,对于所有两位数,它将是 100。对于 103,它将是 105。

我们将把问题分解成两个函数:

isGapful() 函数

它接收一个数字字符串并返回一个布尔值,如下面的代码所示:

const isGapful = (numStr) => {
   const int = parseInt(numStr);
   return int % parseInt(numStr[0] + numStr[numStr.length - 1]) === 0;
};

nearestGapful() 函数

这是我们的主函数,它接收一个数字,返回最接近的 Gapful 数。代码如下:

const nearestGapful = (num) => {
   if(typeof num !== 'number'){
      return -1;
   }
   if(num <= 100){
      return 100;
   }
   let prev = num - 1, next = num + 1;
   while(!isGapful(String(prev)) && !isGapful(String(next))){
      prev--;
      next++;
   };
   return isGapful(String(prev)) ? prev : next;
};

isGapful() 函数根据数字是否为 Gapful 数返回一个布尔值,时间复杂度为常数;nearestGapful() 函数循环直到找到一个 Gapful 数并返回它。

以下是完整的代码:

示例

const n = 134;
//receives a number string and returns a boolean
const isGapful = (numStr) => {
   const int = parseInt(numStr);
   return int % parseInt(numStr[0] + numStr[numStr.length - 1]) === 0;
};
//main function -- receives a number, returns a number
const nearestGapful = (num) => {
   if(typeof num !== 'number'){
      return -1;
   }
   if(num <= 100){
      return 100;
   }
   let prev = num - 1, next = num + 1;
   while(!isGapful(String(prev)) && !isGapful(String(next))){
      prev--;
      next++;
   };
   return isGapful(String(prev)) ? prev : next;
};
console.log(nearestGapful(n));

输出

控制台中的输出将是:

135

更新于: 2020年8月19日

189 次浏览

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告

© . All rights reserved.