查詢哈沙德數 JavaScript


哈沙德數是可以被其各位數字之和整除的數。例如,數字 126 可以被 1+2+6 = 9 整除。

  • 所有個位數都是哈沙德數。

  • 哈沙德數經常以連續群的形式存在,例如 [1,2,3,4,5,6,7,8,9,10],[110,111,112],[1010, 1011, 1012]。

我們的任務是編寫一個函式,該函式接收一個數字作為輸入,檢查它是否是哈沙德數,如果不是,則返回 -1,否則返回連續哈沙德數群的長度。

例如:

harshadNum(1014) = harshadNum(1015) = harshadNum(1016) = harshadNum(1017) = 4
harshadNum(1) = 10
harshadNum(12) = 1
harshadNum(23) = -1

讓我們將這個問題分解成兩個主要函式:

  • isHarshad() → 接收一個數字 num 並根據該數字是否為哈沙德數返回布林值。

  • harshadNum() → 主函式,接收實際數字,在各個點呼叫 isHarshad() 並返回連續數的長度。

編寫 isHarshad 函式():

const isHarshad = (num) => {
   let sum = 0, temp = num;
   while(temp){
      sum += temp % 10;
      temp = Math.floor(temp/10);
   }
   return num % sum === 0;
}

一個非常簡單的迭代函式,返回布林值。

現在讓我們編寫 harshadNum() 函式:

const harshadNum = (number) => {
   //if the input is not harshad return -1
   if(!isHarshad(number)){
      return -1;
   }
   let streak = 1, prev = number-1, next = number+1;
   //check preceding streak
   while(isHarshad(prev) && prev > 0){
      streak++;
      prev--;
   }
   //check succeeding streak
   while(isHarshad(next)){
      streak++;
      next++;
   }
   return streak;
};
console.log(harshadNum(1014));

理解上述程式碼:

  • 檢查輸入是否為哈沙德數,如果不是,則停止函式並返回 -1;

  • 當我們持續獲得哈沙德數時,向後和向前執行一個迴圈,同時更新連續數的長度。

  • 最後返回連續數的長度。

以下是完整的程式碼:

示例

const isHarshad = (num) => {
   let sum = 0, temp = num;
   while(temp){
      sum += temp % 10;
      temp = Math.floor(temp/10);
   }
   return num % sum === 0;
}
const harshadNum = (number) => {
   //if the input is not harshad return -1
   if(!isHarshad(number)){
      return -1;
   }
   let streak = 1, prev = number-1, next = number+1;
   //check preceding streak
   while(isHarshad(prev) && prev > 0){
      streak++;
      prev--;
   }
   //check succeeding streak
   while(isHarshad(next)){
      streak++;
      next++;
   }
   return streak;
};
console.log(harshadNum(1014));

輸出

此程式碼在控制檯中的輸出將是:

4

更新於:2020年8月19日

483 次瀏覽

開啟您的 職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.