समस्या विवरण
इस समस्या में हम सबसे बड़ी K-अंकीय संख्या ढूंढने का प्रयास करेंगे जो X से विभाज्य हो। इस कार्य को करने के लिए हम सूत्र ((10^k) - 1) द्वारा सबसे बड़ी K अंकों की संख्या लेंगे। फिर जांचेंगे कि क्या संख्या X से विभाज्य है या नहीं, यदि नहीं, तो हम इस सूत्र का उपयोग करके सटीक संख्या प्राप्त करेंगे:
max - (max mod X)
उदाहरण
एक उदाहरण 5-अंकीय संख्या का है जो 29 से विभाज्य है। तो सबसे बड़ी 5-अंकीय संख्या 99999 है। यह 29 से विभाज्य नहीं है। अब सूत्र लागू करके हम प्राप्त करेंगे:
99999 - (99999 mod 29) = 99999 - 7 = 99992
संख्या 99992, 29 से विभाज्य है।
एल्गोरिदम
maxKDigit(k, x):
Begin
max = (10^k) - 1
if max is divisible by x, return max
otherwise return max - (max mod x)
End
उदाहरण
#include <iostream>
#include <cmath>
using namespace std;
long long maxKDigit(int k, int x) {
// k अंकों की अधिकतम संख्या प्राप्त करें
long long max = pow(10, k) - 1;
if (max % x == 0) {
return max;
}
return max - (max % x);
}
int main() {
int k, x;
cout << "Enter Digit Count(K) and Divisor(N): ";
cin >> k >> x;
cout << "Result is: " << maxKDigit(k, x);
return 0;
}
आउटपुट
Enter Digit Count(K) and Divisor(N): 5 29 Result is: 99992
अधिक उदाहरण
| K (अंक) | X (भाजक) | अधिकतम K-अंकीय | परिणाम | सत्यापन |
|---|---|---|---|---|
| 5 | 29 | 99999 | 99992 | 99992/29 = 3448 |
| 6 | 87 | 999999 | 999978 | 999978/87 = 11494 |
| 3 | 7 | 999 | 994 | 994/7 = 142 |
| 4 | 13 | 9999 | 9997 | 9997/13 = 769 |
सामान्य सूत्र
सबसे बड़ी K-अंकीय संख्या = 10^K - 1 यदि (10^K - 1) % X == 0 तो उत्तर = 10^K - 1 अन्यथा उत्तर = (10^K - 1) - ((10^K - 1) % X)
समय जटिलता
O(1) - स्थिर समय गणना
बड़े K के लिए नोट
बड़े K के लिए, pow(10, k) ओवरफ्लो कर सकता है। long long (19 अंक तक) या बिग इंटीजर लाइब्रेरी का उपयोग करें।
// बड़े K के लिए स्ट्रिंग-आधारित दृष्टिकोण
string largestKDigitDivisible(int k, int x) {
string max(k, '9'); // "999...9" k बार
// बिग इंटीजर मॉड्यूलो और घटाव लागू करें
// या बूस्ट मल्टीप्रिसिजन का उपयोग करें
}