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