इस समस्या में, हमें एक पूर्णांक n दिया जाता है। और हमें एक संख्या के सभी सबस्ट्रिंग को प्रिंट करना होता है जिसे बनाया जा सकता है लेकिन स्ट्रिंग को परिवर्तित करने की अनुमति नहीं है यानी हम एक पूर्णांक को स्ट्रिंग या सरणी में परिवर्तित नहीं कर सकते हैं।
आइए विषय को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं -
Input: number =5678 Output: 5, 56, 567, 5678, 6, 67, 678, 7, 78, 8
इस समस्या को हल करने के लिए, हमें गणितीय तर्क का उपयोग करना होगा। यहां, हम सबसे महत्वपूर्ण बिट को पहले प्रिंट करेंगे, फिर लगातार बिट्स प्रिंट किए जाएंगे।
एल्गोरिदम
Step1: Take a 10’s power number based on the number of digits. Step2: print values recursively and divide the number by 10 and repeat until the number becomes 0. Step3: Eliminate the MSB of the number and repeat step 2 with this number. Step4: Repeat till the number becomes 0.
उदाहरण
#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; } }
आउटपुट
संख्या 6789 है और एक संख्या का विकल्प है -
6 67 678 6789 7 78 789 8 89 9