Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การหา Harshad Number ใน JavaScript

Harshad Number คือตัวเลขที่หารด้วยผลรวมของตัวเลขแต่ละหลักลงตัว เช่น 126 หารด้วย 1+2+6 = 9 ลงตัว

  • ตัวเลขหลักเดียวทุกตัวเป็น Harshad Number
  • Harshad Number มักปรากฏเป็นกลุ่มติดกัน เช่น [1,2,3,4,5,6,7,8,9,10], [110,111,112], [1010, 1011, 1012]

หน้าที่คือเขียนฟังก์ชันรับตัวเลข ตรวจสอบว่าเป็น Harshad หรือไม่ ถ้าไม่ใช่คืน -1 ถ้าใช่คืนความยาวของกลุ่ม Harshad ที่ติดกัน

เช่น

harshadNum(1014) = harshadNum(1015) = harshadNum(1016) = harshadNum(1017) = 4
harshadNum(1) = 10
harshadNum(12) = 1
harshadNum(23) = -1

แบ่งปัญหาเป็นสองฟังก์ชันหลัก

  • isHarshad() → รับตัวเลข num คืน boolean ว่าเป็น Harshad หรือไม่
  • harshadNum() → ฟังก์ชันหลัก รับตัวเลขจริง เรียก isHarshad() หลายจุด คืนความยาวของ streak

เขียนฟังก์ชัน isHarshad()

const isHarshad = (num) => {
  let sum = 0, temp = num;
  while(temp){
    sum += temp % 10;
    temp = Math.floor(temp/10);
  }
  return num % sum === 0;
}

ฟังก์ชันวนลูปง่ายๆ ที่คืนค่า boolean

ต่อมาเขียน harshadNum()

const harshadNum = (number) => {
  if(!isHarshad(number)){
    return -1;
  }
  let streak = 1, prev = number-1, next = number+1;
  // ตรวจสอบ streak ก่อนหน้า
  while(isHarshad(prev) && prev > 0){
    streak++;
    prev--;
  }
  // ตรวจสอบ streak ถัดไป
  while(isHarshad(next)){
    streak++;
    next++;
  }
  return streak;
};
console.log(harshadNum(1014));

เข้าใจโค้ดข้างต้น

  • ตรวจสอบว่า input เป็น Harshad หรือไม่ ถ้าไม่ใช่ หยุดฟังก์ชันคืน -1
  • รันลูปย้อนหลังและลูปไปหน้า พร้อมกันจนกว่าจะไม่ใช่ Harshad อัปเดต streak ทุกครั้ง
  • สุดท้ายคืนค่า streak

โค้ดเต็ม

ตัวอย่าง

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(!isHarshad(number)){
    return -1;
  }
  let streak = 1, prev = number-1, next = number+1;
  while(isHarshad(prev) && prev > 0){
    streak++;
    prev--;
  }
  while(isHarshad(next)){
    streak++;
    next++;
  }
  return streak;
};
console.log(harshadNum(1014));

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็น

4