ตัวเลข Harshad คือตัวเลขที่หารด้วยผลรวมของหลักลงตัวพอดี เช่นเดียวกับตัวเลข 126 หารด้วย 1+2+6 =9 ลงตัว
-
ตัวเลขหลักเดียวทั้งหมดเป็นตัวเลขหลัก
-
ตัวเลข Harshad มักมีอยู่ในคลัสเตอร์ที่ต่อเนื่องกัน เช่น [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() → รับค่าตัวเลขและคืนค่าบูลีนขึ้นอยู่กับว่าตัวเลขนั้นยากหรือไม่
-
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;
} ฟังก์ชันวนซ้ำค่อนข้างง่ายที่คืนค่าบูลีน
คราวนี้มาเขียนโค้ดฟังก์ชัน harmadNum() กัน -
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