मान लीजिए कि हमारे पास इनपुट n है, हमें सबसे बड़ा पैलिंड्रोम ढूंढना है जो दो n अंकों की संख्याओं के गुणन का उपयोग करके बनाया जा सकता है। चूंकि संख्याएं बहुत बड़ी हैं, हम 1337 का उपयोग करके मॉड का प्रदर्शन कर सकते हैं। इसलिए यदि इनपुट 2 है, तो उत्तर 987, 987 =(99*91) मॉड 1337 =9009 मॉड 1337 =987 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- मैक्सवैल :=10^n - 1
- minVal :=maxVal / 10
- इनिशियलाइज़ h :=maxVal के लिए, जब h> minVal, अपडेट करें (h को 1 से घटाएं), −
- करें
- बाएं:=एच, दाएं:=0
- इनिशियलाइज़ करने के लिए i :=h, जब i> 0, अपडेट करें दाएँ =दाएँ * 10 + i मॉड 10, बाएँ:=बाएँ * 10, i :=i / 10, करें −
- x :=बाएँ + दाएँ
- इनिशियलाइज़ करने के लिए i :=maxVal, जब i> minVal, अपडेट (i 1 से घटाएं), करें −
- यदि मैं
- लूप से बाहर आएं
- यदि मैं
- यदि x mod i, 0 के समान है, तो −
- रिटर्न x मॉड 1337
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h> using namespace std; typedef long long int lli; class Solution { public: int largestPalindrome(int n) { int maxVal = pow(10, n) - 1; int minVal = maxVal / 10; for(int h = maxVal; h > minVal; h--){ lli left = h; lli right = 0; for(lli i = h; i > 0; right = right * 10 + i % 10, left*= 10, i/= 10); lli x = left + right; for(int i = maxVal; i > minVal; i--){ if(i < x / i) break; if(x % i == 0) return x % 1337; } } return 9; } }; main(){ Solution ob; cout << (ob.largestPalindrome(3)); }
इनपुट
3
आउटपुट
123