Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

उन आधारों की संख्या ढूंढने के लिए C++ प्रोग्राम जिनमें संख्या को M से अधिक नहीं दर्शाया जा सकता


मान लीजिए हमारे पास एक संख्यात्मक स्ट्रिंग S है, और एक अन्य संख्या M है। मान लें d, S में सबसे बड़ा अंक है। हमें उन विभिन्न पूर्णांकों की संख्या ढूंढनी है जो M से अधिक नहीं हैं, जिन्हें d+1 से कम नहीं एक पूर्णांक n चुनकर और S को आधार-n संख्या के रूप में देखकर पाया जा सकता है?

उदाहरण के लिए, यदि इनपुट S = "999"; M = 1500 है, तो आउटपुट 3 होगा, क्योंकि S को आधार 10 संख्या के रूप में, हमें 999 मिलता है, आधार 11 संख्या के रूप में, हमें 1197 मिलता है, आधार 12 संख्या के रूप में, हमें 1413 मिलता है। ये तीन मान केवल वही हैं जो हम प्राप्त कर सकते हैं और 1500 से अधिक नहीं हैं।

चरण

इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे:

यदि S का आकार 1 के बराबर है, तो: यदि S का संख्यात्मक मान <= M, तो: 1 वापस करें अन्यथा 0 वापस करें d := 0 S के प्रत्येक वर्ण c के लिए, करें d := d और (c - '0' का ASCII) का अधिकतम left := d right := M + 1 जब तक right - left > 1, करें: mid := (left + right) / 2 v := 0 S के प्रत्येक वर्ण c के लिए, करें यदि v > M / mid, तो: v := M + 1 अन्यथा v := v * mid + (c - '0' का ASCII) यदि v <= M, तो: left := mid अन्यथा right := mid left - d वापस करें

उदाहरण

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:

#include <bits/stdc++.h> using namespace std; int solve(string S, int M){    if (S.size() == 1){       if (stoi(S) <= M)          return 1;       else          return 0;    }    int d = 0;    for (char c : S)       d = max(d, int(c - '0'));    long left = d;    long right = M + 1;    while (right - left > 1){       long mid = (left + right) / 2;       long v = 0;       for (char c : S){          if (v > M / mid)             v = M + 1;          else             v = v * mid + (c - '0');       }       if (v <= M)          left = mid;       else          right = mid;    }    return left - d; } int main(){    string S = "999";    int M = 1500;    cout << solve(S, M) << endl; }

इनपुट

"999", 1500

आउटपुट

3

  1. - C++ प्रोग्राम: किसी संख्या को स्वयं से छोटी संख्याओं के योग के रूप में लिखने के तरीकों की संख्या

    इस प्रोग्राम में हम गिनेंगे कि एक संख्या को स्वयं से छोटी संख्याओं के योग के रूप में कितने तरीकों से दर्शाया जा सकता है। यह प्रोग्राम दी गई संख्या के पार्टीशन (partition) की गणना करेगा। हम एक संख्या n को इनपुट के रूप में लेते हैं, फिर एक संख्या से शुरू करके हर बार 1 घटाकर इसे तोड़ते हैं। यदि नया पा

  1. - C++ प्रोग्राम: दी गई स्ट्रिंग के क्रमचय (Permutations) की संख्या ज्ञात करना

    हम एक स्ट्रिंग के कैरेक्टर्स को अलग-अलग क्रम में व्यवस्थित कर सकते हैं। यहां हम देखेंगे कि दी गई स्ट्रिंग से कितने क्रमचय बनाए जा सकते हैं। हम जानते हैं कि यदि एक स्ट्रिंग abc है। इसमें तीन कैरेक्टर्स हैं; हम उन्हें 3! = 6 अलग-अलग तरीकों से व्यवस्थित कर सकते हैं। इसलिए n कैरेक्टर्स वाली स्ट्रिंग क

  1. - Python में x से बड़ी सबसे छोटी संख्या कैसे खोजें?

    बिल्ट-इन फ़ंक्शन ceil() दी गई संख्या से बड़ी सबसे छोटी संख्या लौटाता है।>>> x=6.67 >>> import math >>> math.ceil(x) 7 >>> x=1.13 >>> math.ceil(x) 2 >>> x=5.78 >>> math.ceil(x) 6 >>> x=-5.78 >>> math.ceil(x) -5ध्यान दें