हर्षद नंबर वे संख्याएं हैं जो अपने अंकों के योग से बिल्कुल विभाज्य होती हैं। जैसे संख्या 126, यह 1+2+6 = 9 से पूरी तरह विभाज्य है।
- सभी एक अंक की संख्याएं हर्षद नंबर हैं।
- हर्षद नंबर अक्सर लगातार क्लस्टर में मौजूद होते हैं जैसे [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() → एक नंबर num लेता है और इस आधार पर बूलियन लौटाता है कि संख्या हर्षद है या नहीं।
- 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;
}
काफी सरल इटरेटिव फ़ंक्शन जो बूलियन लौटाता है।
अब आइए harshadNum() फ़ंक्शन कोड करें:
const harshadNum = (number) => {
// यदि इनपुट हर्षद नहीं है तो -1 लौटाएं
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));
उपरोक्त कोड को समझना:
- जांचें कि इनपुट हर्षद है या नहीं, यदि नहीं तो फ़ंक्शन रोकें और -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) => {
// यदि इनपुट हर्षद नहीं है तो -1 लौटाएं
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