ตัวเลข 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