在 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 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

立即開始
廣告