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

C++ में भिन्न को आवर्ती दशमलव में बदलना


मान लीजिए हमारे पास दो पूर्णांक हैं जो एक भिन्न के अंश (numerator) और हर (denominator) को दर्शाते हैं। हमें भिन्न को स्ट्रिंग फॉर्मेट में लौटाना है। यदि दशमलव भाग आवर्ती (repeating) है, तो आवर्ती भाग को कोष्ठक में संलग्न करें।

उदाहरण: अंश=2, हर=3 → "0.(6)"।

लंबा विभाजन + हैश मैप

  1. यदि अंश 0 है, तो "0" लौटाएँ।
  2. चिह्न निर्धारित करें (यदि एक ऋणात्मक है तो '-')।
  3. पूर्णांक भाग: divisor / dividend।
  4. शेष = divisor % dividend। यदि 0, तो पूर्णांक भाग लौटाएँ।
  5. दशमलव बिंदु '.' जोड़ें।
  6. मैप remainder → आउटपुट स्ट्रिंग में स्थिति रखें।
  7. while remainder != 0:
    • यदि शेष मैप में है: आवर्ती भाग मिला। मैप में स्टोर की गई स्थिति पर '(' डालें, अंत में ')' जोड़ें, ब्रेक।
    • अन्यथा: मैप में शेष की वर्तमान स्थिति स्टोर करें।
    • remainder *= 10, अंक = remainder / dividend जोड़ें।
    • remainder %= dividend।
  8. स्ट्रिंग लौटाएँ।

C++ कार्यान्वयन

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    string fractionToDecimal(int numerator, int denominator) {
        if (numerator == 0) return "0";
        string ans;
        if ((numerator < 0) ^ (denominator < 0)) ans += '-';
        
        long long div = llabs((long long)numerator);
        long long dvd = llabs((long long)denominator);
        long long rem = div % dvd;
        
        ans += to_string(div / dvd);
        if (rem == 0) return ans;
        
        ans += '.';
        unordered_map<long long, int> mp;
        
        while (rem != 0) {
            if (mp.count(rem)) {
                ans.insert(mp[rem], "(");
                ans += ')';
                break;
            }
            mp[rem] = ans.size();
            rem *= 10;
            ans += to_string(rem / dvd);
            rem %= dvd;
        }
        return ans;
    }
};

int main() {
    Solution ob;
    cout << ob.fractionToDecimal(100, 6); // 16.(6)
    return 0;
}

इनपुट

100 6

आउटपुट

16.(6)
  1. C++ में हेक्साडेसिमल से डेसिमल रूपांतरण C++ में हेक्साडेसिमल से डेसिमल रूपांतरण

    एक हेक्साडेसिमल संख्या इनपुट के रूप में दी गई है, कार्य दी गई हेक्साडेसिमल संख्या को डेसिमल संख्या में बदलना है। कंप्यूटर में हेक्साडेसिमल संख्या को आधार 16 के साथ दर्शाया जाता है और डेसिमल संख्या को आधार 10 के साथ दर्शाया जाता है और मान 0-9 से दर्शाए जाते हैं जबकि हेक्साडेसिमल संख्या में 0-15 से अं

  1. C++ में बाइनरी से डेसिमल रूपांतरण C++ में बाइनरी से डेसिमल रूपांतरण

    एक बाइनरी संख्या इनपुट के रूप में दी गई है, कार्य दी गई बाइनरी संख्या को डेसिमल संख्या में बदलना है। कंप्यूटर में डेसिमल संख्या को आधार 10 के साथ दर्शाया जाता है और बाइनरी संख्या को आधार 2 के साथ दर्शाया जाता है क्योंकि इसमें केवल दो बाइनरी अंक 0 और 1 होते हैं जबकि डेसिमल संख्याएं 0-9 से शुरू होने व

  1. - C# में Decimal.Remainder() मेथड

    C# में Decimal.Remainder() मेथड का उपयोग दो Decimal मानों को विभाजित करने के बाद शेषफल की गणना के लिए किया जाता है। सिंटैक्स निम्नलिखित सिंटैक्स है: public static decimal Remainder (decimal val1, decimal val2); यहाँ, val1 लाभांश (dividend) है, जबकि val2 भाजक (divisor) है। उदाहरण आइए अब Decimal.Re