ตัวเลขเป็นจำนวนช่องว่างเมื่อ -
- มีอย่างน้อยสามหลักและ
- หารด้วยจำนวนที่เกิดขึ้นโดยนำหลักแรกและหลักสุดท้ายมาหารกันอย่างลงตัว
ตัวอย่างเช่น −
ตัวเลข 1053 เป็นจำนวนช่องว่างเพราะมี 4 หลัก และหารด้วย 13 ลงตัวพอดี ในทำนองเดียวกัน 135 เป็นจำนวนช่องว่างเพราะมี 3 หลัก และหารด้วย 15 ลงตัวเป๊ะ
งานของเราคือเขียนโปรแกรมที่คืนค่าตัวเลขช่องว่างที่ใกล้ที่สุดเป็นตัวเลขที่เราระบุเป็นอินพุต
ตัวอย่างเช่น สำหรับตัวเลข 2 หลักทั้งหมด จะเป็น 100 สำหรับ 103 จะเป็น 105
เราจะแบ่งปัญหาออกเป็นสองหน้าที่ -
ฟังก์ชัน isGapful()
ได้รับสตริงตัวเลขและส่งคืนบูลีนตามโค้ดด้านล่าง -
const isGapful = (numStr) => { const int = parseInt(numStr); return int % parseInt(numStr[0] + numStr[numStr.length - 1]) === 0; };
ฟังก์ชัน NearestGapful()
นี่คือฟังก์ชันหลักของเราที่รับตัวเลข ส่งคืนจำนวนช่องว่างที่ใกล้ที่สุด นี่คือรหัส −
const nearestGapful = (num) => { if(typeof num !== 'number'){ return -1; } if(num <= 100){ return 100; } let prev = num - 1, next = num + 1; while(!isGapful(String(prev)) && !isGapful(String(next))){ prev--; next++; }; return isGapful(String(prev)) ? prev : next; };
ฟังก์ชัน isGapful() จะคืนค่าบูลีนโดยพิจารณาจากจำนวนที่เว้นว่างหรือไม่ใช่เวลาที่ไม่คงที่ ฟังก์ชัน NearGapful() จะวนซ้ำจนกว่าจะพบตัวเลขที่เป็นช่องว่างและส่งกลับ
ต่อไปนี้เป็นรหัสที่สมบูรณ์ -
ตัวอย่าง
const n = 134; //receives a number string and returns a boolean const isGapful = (numStr) => { const int = parseInt(numStr); return int % parseInt(numStr[0] + numStr[numStr.length - 1]) === 0; }; //main function -- receives a number, returns a number const nearestGapful = (num) => { if(typeof num !== 'number'){ return -1; } if(num <= 100){ return 100; } let prev = num - 1, next = num + 1; while(!isGapful(String(prev)) && !isGapful(String(next))){ prev--; next++; }; return isGapful(String(prev)) ? prev : next; }; console.log(nearestGapful(n));
ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็น -
135