找出Harshad数字JavaScript

Harshad数字是可以被其数字的总和完全除尽的数字。像数字126一样,它可以被1 + 2 + 6 = 9完全整除。

  • 所有一位数字都是严格的数字。

  • Harshad数通常存在于连续的簇中,例如[1,2,3,4,5,6,7,8,9,10],[110,111,112],[1010、1011、1012]。

我们的工作是编写一个接受Number的函数作为输入,以检查它是否是一个苛刻的数字,如果不是,则返回-1,否则返回连续的Hardad簇的条纹长度。

例如-

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

让我们将此问题分为两个主要功能,

  • isHarshad()→ 接受一个数字num并返回一个布尔值,具体取决于该数字是否严格。

  • harshadNum()→接收实际数字的主函数,isHarshad()在各个点进行调用并返回条纹的长度。

编码isHarshad function()-

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) => {
   //如果输入不是苛刻的,返回-1-
   if(!isHarshad(number)){
      return -1;
   }
   let streak = 1, prev = number-1, next = number+1;
   //检查前面的条纹
   while(isHarshad(prev) && prev > 0){
      streak++;
      prev--;
   }
   //检查连续条纹
   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) => {
   //如果输入不是苛刻的,返回-1-
   if(!isHarshad(number)){
      return -1;
   }
   let streak = 1, prev = number-1, next = number+1;
   //检查前面的条纹
   while(isHarshad(prev) && prev > 0){
      streak++;
      prev--;
   }
   //检查连续条纹
   while(isHarshad(next)){
      streak++;
      next++;
   }
   return streak;
};
console.log(harshadNum(1014));

输出结果

在控制台中此代码的输出将是-

4
猜你喜欢