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

सी++ में समान परिमेय संख्याएं

मान लीजिए कि हमारे पास दो तार हैं, ये एस और टी हैं, जिनमें से प्रत्येक एक सकारात्मक परिमेय संख्या का प्रतिनिधित्व करता है, हमें यह जांचना है कि क्या वे एक ही संख्या का प्रतिनिधित्व करते हैं या अभी। स्ट्रिंग्स परिमेय संख्या के दोहराए जाने वाले भाग को दर्शाने के लिए कोष्ठक का उपयोग कर सकते हैं।

जैसा कि हम जानते हैं कि परिमेय संख्याओं को तीन भागों तक का उपयोग करके दर्शाया जा सकता है:एक पूर्णांक भाग, एक गैर-दोहराव वाला भाग और एक दोहराव वाला भाग। संख्या को निम्नलिखित तीन तरीकों में से एक में दर्शाया जाएगा -

  • केवल पूर्णांक भाग (जैसे 0, 12, 123)

  • IntegerPart.NonRepeatingPart (जैसे 0.5, 1.0, 2.12, 2.0001)

  • IntegerPart.NonRepeatingPart(RepeatingPart>) (जैसे 0.1(6), 0.9(9), 0.00(1212))

उदाहरण के लिए दोनों 0.1(6) या 0.1666(6) या 0.166(66) 1/6 के सही निरूपण हैं।

इसलिए, यदि इनपुट S ="0.(52)" और T ="0.5(25)" जैसा है, तो आउटपुट ट्रू होगा।

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

  • फ़ंक्शन f() को परिभाषित करें, यह S लेगा,

    • i :='(' का सूचकांक S

      . में
    • अगर मैं एस लंबाई की सीमा में है, तो -

      • आधार :=इंडेक्स 0 से i-1 तक S का सबस्ट्रिंग

      • rep :=इंडेक्स i + 1 से S का सबस्ट्रिंग (S - i - 3 की लंबाई)

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

        • आधार:=आधार + प्रतिनिधि

      • वास्तविक मूल्य के रूप में वापसी आधार

    • S को वास्तविक मान के रूप में लौटाएं

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

  • सही लौटें जब f(S) f(T) के समान हो

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;class Solution {
   public:
   bool isRationalEqual(string S, string T){
      return f(S) == f(T);
   }
   double f(string S){
      auto i = S.find("(");
      if (i != string::npos) {
         string base = S.substr(0, i);
         string rep = S.substr(i + 1, S.length() - i - 2);
         for (int j = 0; j < 20; ++j)
         base += rep;
         return stod(base);
      }
      return stod(S);
   }
};
main(){
   Solution ob;
   cout << (ob.isRationalEqual("0.(52)", "0.5(25)"));
}

इनपुट

"0.(52)", "0.5(25)"

आउटपुट

1

  1. C++ . में इक्विडिजिटल नंबर

    इक्विडिजिटल संख्याएँ गणितीय रूप से विशेष संख्याएँ होती हैं जिनमें संख्या में अंकों की संख्या उसके अभाज्य गुणनखंड में संख्या के बराबर होती है। इस समस्या में, हमें एक पूर्णांक मान n दिया गया है। हमारा काम n तक के सभी सम-डिजिटल नंबरों के लिए एक प्रोग्राम बनाना है। समस्या को समझने के लिए एक उदाहरण लेते

  1. C++ में Emirp नंबर

    एमिर्प संख्या एक विशेष प्रकार की संख्या है जो एक अभाज्य संख्या है जिसके अंकों को उलटने पर एक अन्य अभाज्य संख्या बनती है (यह अभाज्य संख्या मूल संख्या से भिन्न होती है)। एमिर्प प्राइम का उल्टा है। कुछ अभाज्य संख्याएँ जो emirp नहीं हैं वे हैं पैलिंड्रोमिक अभाज्य और एकल अंक अभाज्य संख्याएँ। कुछ ए

  1. सी++ में डुडेनी नंबर्स

    संख्या सिद्धांत में परिभाषित एक गणितीय संख्या (विकिपीडिया)। नंबर हेनरी डुडेनी . द्वारा खोजा गया था . इसका गणितीय सूत्र है - यहाँ, हमें एक पूर्णांक n दिया गया है। हमारा काम जांच करना है कि दिया गया नंबर n एक डुडनी नंबर है या नहीं। समस्या को समझने के लिए एक उदाहरण लेते हैं, इनपुट: एन =17592 आ