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

C++ . में सुपर पालिंड्रोम

मान लीजिए कि हमारे पास एक धनात्मक पूर्णांक N है, जिसे एक पालिंड्रोम होने पर एक सुपरपैलिंड्रोम कहा जाता है, और यह एक पैलिंड्रोम का वर्ग भी है। अब मान लें कि हमारे पास दो धनात्मक पूर्णांक L और R हैं, हमें [L, R] की समावेशी श्रेणी में सुपरपैलिंड्रोम की संख्या ज्ञात करनी है।

इसलिए, अगर इनपुट एल =5 और आर =500 जैसा है, तो आउटपुट 3 होगा, सुपरपैलिंड्रोम 9, 121, 484 हैं।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • फ़ंक्शन हेल्पर () को परिभाषित करें, इसमें x, m, M, lb, ub,

    लगेगा
  • यदि x> ub, तो -

    • वापसी

  • अगर x>=lb और (x * x) पैलिंड्रोम है, तो -

    • (उत्तर 1 से बढ़ाएँ)

  • प्रारंभ करने के लिए मैं:=1, जब एम + 2 * मैं <=एम, अद्यतन (मैं 1 से बढ़ाएँ), यह करें:

    • डब्ल्यू:=10^(एम + 2 * आई -1)

    • डब्ल्यू:=10^i

    • इनिशियलाइज़ z :=1 के लिए, जब z <=9, अपडेट करें (1 से z बढ़ाएँ), करें -

      • हेल्पर (जेड * डब्ल्यू + एक्स * डब्ल्यू, एम + 2 * आई, एम, एलबी, यूबी)

  • मुख्य विधि से, निम्न कार्य करें -

  • lb :=L का वर्गमूल, ub :=R का वर्गमूल

  • एम:=यूबी बेस 10 + 1 का लॉग निष्पादित करें

  • इनिशियलाइज़ z :=0 के लिए, जब z <=9, अपडेट करें (1 से z बढ़ाएँ), do−

    • हेल्पर (जेड, 1, एम, एलबी, यूबी)

    • हेल्पर (11 * जेड, 2, एम, एलबी, यूबी)

  • वापसी उत्तर

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   int ans = 0;
   public:
   int superpalindromesInRange(string L, string R){
      long double lb = sqrtl(stol(L)), ub = sqrtl(stol(R));
      int M = log10l(ub) + 1;
      for (int z = 0; z <= 9; z++) {
         helper(z, 1, M, lb, ub);
         helper(11 * z, 2, M, lb, ub);
      }
      return ans;
   }
   private:
   void helper(long x, int m, int M, long double lb, long double ub){
      if (x > ub)
      return;
      if (x >= lb && is_palindrome(x * x))
      ans++;
      for (int i = 1; m + 2 * i <= M; i++) {
         long W = powl(10, m + 2 * i - 1) + 1;
         long w = powl(10, i);
         for (int z = 1; z <= 9; z++)
         helper(z * W + x * w, m + 2 * i, M, lb, ub);
      }
   }
   bool is_palindrome(long x){
      if (x == 0)
      return true;
      if (x % 10 == 0)
      return false;
      long left = x, right = 0;
      while (left >= right) {
         if (left == right || left / 10 == right)
         return true;
         right = 10 * right + (left % 10), left /= 10;
      }
      return false;
   }
};
main(){
   Solution ob;
   cout << (ob.superpalindromesInRange("5", "500"));
}

इनपुट

"5", "500"

आउटपुट

3

  1. सी++ में इनकैप्सुलेशन

    Encapsulation डेटा और विधियों को एक साथ लाता है जो डेटा को एक घटक में हेरफेर करता है और उन्हें बाहरी हस्तक्षेप से बचाता है। संक्षेप में, एनकैप्सुलेशन में डेटा के साथ-साथ डेटा का उपयोग करने वाले कार्यों को बंडल करना शामिल है। डेटा इनकैप्सुलेशन डेटा छिपाने की बहुत महत्वपूर्ण अवधारणा की ओर ले जाता है।

  1. C++ . में पहचानकर्ता

    C++ पहचानकर्ता एक ऐसा नाम है जिसका उपयोग किसी चर, फ़ंक्शन, वर्ग, मॉड्यूल, या किसी अन्य उपयोगकर्ता-परिभाषित आइटम की पहचान करने के लिए किया जाता है। एक पहचानकर्ता अक्षर A से Z या a से z या अंडरस्कोर (_) से शुरू होता है और उसके बाद शून्य या अधिक अक्षर, अंडरस्कोर और अंक (0 से 9) होते हैं। C++ पहचानकर्त

  1. Linux पर C++ का सबसे अच्छा IDE क्या है?

    केवल टेक्स्ट एडिटर्स पर बड़े प्रोजेक्ट्स को मैनेज करना मुश्किल है। यदि आप ऐसे मामलों में आईडीई का उपयोग करते हैं तो आप अधिक उत्पादक और कम निराश होने की संभावना रखते हैं। विभिन्न प्रकार के आईडीई हैं और आपको अपनी आवश्यकताओं के अनुरूप सही का चयन करना चाहिए। Linux पर C++ के लिए एक भी सर्वश्रेष्ठ IDE नही