इस समस्या में, हमें एक पूर्णांक n दिया गया है। और हमें एक संख्या के उन सभी उपस्ट्रिंग को प्रिंट करना है जो बनाए जा सकते हैं लेकिन स्ट्रिंग में रूपांतरण की अनुमति नहीं है यानी हम पूर्णांक को स्ट्रिंग या सरणी में परिवर्तित नहीं कर सकते।
विषय को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं -
इनपुट: संख्या = 5678 आउटपुट: 5, 56, 567, 5678, 6, 67, 678, 7, 78, 8
इस समस्या को हल करने के लिए, हमें गणितीय तर्क का उपयोग करना होगा। यहां, हम पहले सबसे महत्वपूर्ण बिट प्रिंट करेंगे, फिर क्रमिक बिट्स प्रिंट किए जाएंगे।
एल्गोरिदम
चरण 1: अंकों की संख्या के आधार पर 10 की घात वाली संख्या लें। चरण 2: मानों को रिकर्सिव रूप से प्रिंट करें और संख्या को 10 से विभाजित करें और तब तक दोहराएं जब तक संख्या 0 न हो जाए। चरण 3: संख्या का MSB हटाएं और इस संख्या के साथ चरण 2 दोहराएं। चरण 4: तब तक दोहराएं जब तक संख्या 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