Số Harshad là những số chia hết chính xác cho tổng các chữ số của chúng, giống như số 126, nó hoàn toàn chia hết cho 1 + 2 + 6 =9.
-
Tất cả các số có một chữ số đều là số harshad.
-
Các số Harshad thường tồn tại trong các cụm liên tiếp như [1,2,3,4,5,6,7,8,9,10], [110,111,112], [1010, 1011, 1012].
Công việc của chúng ta là viết một hàm nhận Số làm đầu vào kiểm tra xem đó có phải là số harshadnumber hay không, nếu không thì trả về -1, ngược lại thì trả về độ dài của chuỗi liên tiếp của cụmharshad.
Ví dụ -
harshadNum(1014) = harshadNum(1015) = harshadNum(1016) = harshadNum(1017) = 4 harshadNum(1) = 10 harshadNum(12) = 1 harshadNum(23) = -1
Hãy chia vấn đề này thành hai chức năng chính,
-
isHarshad () → nhận vào một số num và trả về một boolean tùy thuộc vào việc số đó có phải là harshad hay không.
-
harshadNum () → hàm chính nhận số thực, thực hiện cuộc gọi đến isHarshad () tại các điểm khác nhau và trả về độ dài của chuỗi.
Mã hóa hàm isHarshad () -
const isHarshad = (num) => {
let sum = 0, temp = num;
while(temp){
sum += temp % 10;
temp = Math.floor(temp/10);
}
return num % sum === 0;
} Hàm lặp lại khá đơn giản trả về boolean
Bây giờ, hãy mã hóa hàm 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)); Hiểu mã trên -
-
Kiểm tra xem đầu vào có phải là harshad hay không, nếu không, hãy dừng chức năng và trả về -1;
-
Chạy ngược một vòng lặp lại, một vòng tiến lên trong khi chúng tôi tiếp tục nhận được số harshadnumbers, đồng thời tiếp tục cập nhật chuỗi
-
Cuối cùng trả lại chuỗi
Sau đây là mã hoàn chỉnh -
Ví dụ
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)); Đầu ra
Đầu ra cho mã này trong bảng điều khiển sẽ là -
4