এই সমস্যায়, একটি পূর্ণসংখ্যা n দেওয়া থাকে। এবং আমাদের সেই সংখ্যার সব সাবস্ট্রিং প্রিন্ট করতে হবে কিন্তু স্ট্রিংয়ে কনভার্ট করা যাবে না অর্থাৎ আমরা ইন্টিজারকে স্ট্রিং বা অ্যারেতে কনভার্ট করতে পারব না।
উদাহরণ দিয়ে বুঝি:
ইনপুট: number = 5678 আউটপুট: 5, 56, 567, 5678, 6, 67, 678, 7, 78, 8
এই সমস্যাটি সমাধান করতে, আমাদের ম্যাথেম্যাটিক্যাল লজিক ব্যবহার করতে হবে। এখানে, আমরা সবচেয়ে σημαντपूर्ण বিট (MSB) প্রথমে প্রিন্ট করব, তারপরuccessive বিটগুলো প্রিন্ট করব।
অ্যালগরিদম
ধাপ ১: ডিজিট সংখ্যা অনুযায়ী ১০-এর পাওয়ার নম্বর নিন। ধাপ ২: রিকার্শিভলি ভ্যালু প্রিন্ট করুন এবং সংখ্যাকে ১০ দিয়ে ভাগ করুন এবং পুনরাবৃত্তি করুন যতক্ষণ না সংখ্যা ০ হয়। ধাপ ৩: সংখ্যার MSB বাদ দিন এবং এই সংখ্যার সাথে ধাপ ২ পুনরাবৃত্তি করুন। ধাপ ৪: সংখ্যা ০ হয়ে যাওয়া পর্যন্ত পুনরাবৃত্তি করুন।
C++ উদাহরণ
#include <iostream> #include<math.h> using namespace std; void printSubNumbers(int n) ; int main(){ int n = 6789; cout<<"The number is "<<n<<" and the substring of number are :\n"; printSubNumbers(n); return 0; } void printSubNumbers(int n){ int s = log10(n); int d = (int)(pow(10, s) + 0.5); int k = d; while (n) { while (d) { cout<<(n / d)<<" "; d = d / 10; } n = n % k; k = k / 10; d = k; } }আউটপুট
সংখ্যা ৬৭৮৯ এবং সংখ্যার সাবস্ট্রিংগুলো হলো:
6 67 678 6789 7 78 789 8 89 9