সমস্যা বিবরণ
একটি নম্বর n দেওয়া আছে। ১ থেকে n পর্যন্ত সব নম্বরের ইংরেজি নামের টোটাল অক্ষর সংখ্যা বের করতে হবে।
উদাহরণ: n=5 → one, two, three, four, five → ৩+৩+৫+৪+৪ = ১৯
সমাধান
const sumUpto = (num = 1) => {
let sum = 0;
const lenHundred = 7; // "hundred"
const lenThousand = 8; // "thousand"
const lenPlaceOnes = [0,3,3,5,4,4,3,5,5,4]; // zero, one, two...
const lenPlaceTens = [0,3,6,6,5,5,5,7,6,6]; // ten, twenty, thirty...
for (let i = 1; i <= num; i++) {
let placeOnes = i % 10;
let placeTens = Math.floor(i / 10) % 10;
let placeHundreds = Math.floor(i / 100) % 10;
let placeThousands = Math.floor(i / 1000) % 10;
sum += lenPlaceOnes[placeOnes];
sum += lenPlaceTens[placeTens];
if (placeHundreds != 0) {
sum += lenHundred + lenPlaceOnes[placeHundreds];
}
if (placeThousands != 0) {
sum += lenThousand + lenPlaceOnes[placeThousands];
}
if (placeTens === 1) { // teens (11-19)
switch (placeOnes) {
case 4: case 6: case 7: case 9: sum += 1; break;
}
}
if (i > 100 && i % 100 != 0) {
sum += 3; // "and"
}
}
return sum;
};
console.log(sumUpto(12)); // 51
console.log(sumUpto(5)); // 19
console.log(sumUpto(122)); // 1280
আউটপুট
51 19 1280
ব্যাখ্যা
- প্রি-ক্যালকুলেটেড ডিজিট লেন্থ অ্যারে ব্যবহার করা হয়েছে পারফরম্যান্সের জন্য।
- ইংরেজি নম্বর নামের নিয়ম (teens, hundred, thousand, "and") হ্যান্ডেল করা হয়েছে।