Số Gapful thỏa mãn:
- Có ít nhất 3 chữ số
- Chia hết cho số ghép từ chữ số đầu và cuối
Ví dụ: 1053 chia hết cho 13 (1 và 3), 135 chia hết cho 15.
Viết chương trình trả về số Gapful gần nhất với số nhập vào. Với số 2 chữ số → 100, với 103 → 105.
Chia thành 2 hàm:
Hàm isGapful()
const isGapful = (numStr) => { const int = parseInt(numStr); return int % parseInt(numStr[0] + numStr[numStr.length - 1]) === 0; };Hàm 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() kiểm tra trong O(1), nearestGapful() lặp cho đến khi tìm thấy.
Ví dụ hoàn chỉnh
const n = 134; const isGapful = (numStr) => { const int = parseInt(numStr); return int % parseInt(numStr[0] + numStr[numStr.length - 1]) === 0; }; 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));Kết quả
Đầu ra console:
135