start এবং end এর মধ্যে একটি সংখ্যা রেঞ্জ দেওয়া আছে। লক্ষ্য হল রেঞ্জ [start, end]-এ থাকা যেসব সংখ্যার প্রথম ডিজিট এবং শেষ ডিজিট সমান, তাদের সংখ্যা বের করা।
সব একক ডিজিটের সংখ্যা যদি রেঞ্জে থাকে তবে গণ্য হবে।
উদাহরণ দিয়ে বোঝা যাক
উদাহরণ ১
ইনপুট - start = 100, end = 200
আউটপুট - প্রথম এবং শেষ ডিজিট সমান হলে সংখ্যা: ১০
ব্যাখ্যা - সংখ্যাগুলো: ১০১, ১২১, ১৩১, ১৪১, ১৫১, ১৬১, ১৭১, ১৮১, ১৯১।
উদাহরণ ২
ইনপুট - start = 1, end = 10
আউটপুট - প্রথম এবং শেষ ডিজিট সমান হলে সংখ্যা: ৯
ব্যাখ্যা - সব ১-ডিজিটের সংখ্যা গণ্য হবে: ১, ২, ৩, ৪, ৫, ৬, ৭, ৮, ৯।
প্রোগ্রামে ব্যবহৃত পদ্ধতি
সব একক ডিজিটের সংখ্যা রেঞ্জে থাকলে গণ্য হবে। এখন প্রতিটি নম্বরের জন্য প্রথম এবং শেষ ডিজিট চেক করুন। যদি প্রথম ডিজিট শেষ ডিজিটের চেয়ে বড় হয় তবে 8 + val/10 কাউন্টে যোগ করুন, যদি ছোট হয় তবে 9 + val/10 যোগ করুন। এখানে val হলো রিকার্সিভ কল range(int val)-এ বর্তমান নম্বর।
- ইন্টিজার
startএবংendরেঞ্জ ভেরিয়েবল হিসেবে নিন। count = range(end) - range(start)।- ফাংশন
range(int val)ইন্টিজার নম্বর নিয়ে ফলাফল রিটার্ন করে। - প্রাথমিক কাউন্ট ০।
end = val%10(শেষ ডিজিট)।- যদি
val < 10হয় (একক ডিজিট) তবেvalরিটার্ন করুন। - হোয়াইল লুপে
start = val%10,val/=10করে প্রথম ডিজিট বের করুন। - যদি
start <= endহয় তবেcount = 9 + set_val/10। - যদি
endহয় তবেcount = 8 + set_val/10। - চূড়ান্ত
countরিটার্ন করুন।
উদাহরণ কোড
#include <iostream>
using namespace std;
int range(int val) {
int count = 0;
int start;
int end = val % 10;
int set_val = val;
if (val < 10) return val;
end = val % 10;
while (val) {
start = val % 10;
val = val / 10;
}
if (start <= end) {
count = 9 + set_val / 10;
} else {
count = 8 + set_val / 10;
}
return count;
}
int main() {
int start = 10, end = 50;
int count = range(end) - range(start);
cout << "Count of Numbers in Range where first digit is equal to last digit of the number are: " << count;
return 0;
}
উপরের কোড রান করলে নিচের আউটপুটটি পাওয়া যাবে:
আউটপুট
Count of Numbers in Range where first digit is equal to last digit of the number are: 4