查找哈沙德数 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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP