Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

ค้นหาหมายเลข Harshad JavaScript


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