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

C++ में परिमेय संख्या प्रतिनिधित्व से दशमलव संख्या दिखाने का प्रोग्राम

समस्या विवरण

मान लीजिए हमारे पास दो संख्याएं हैं जिन्हें अंश और हर कहा जाता है जो (अंश/हर) के रूप में एक परिमेय संख्या को दर्शाती हैं। हमें इसका दशमलव प्रतिनिधित्व एक स्ट्रिंग के रूप में ढूंढना है। यदि कुछ आवर्ती संख्याएं हैं, तो उन्हें ब्रैकेट से घेरें।

उदाहरण के लिए, यदि इनपुट है अंश = 164 हर = 3, तो आउटपुट "54.(6)" होगा।

हल करने का दृष्टिकोण

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

  1. यदि अंश == 0, तो "0" वापस करें
  2. एक ऐरे ans परिभाषित करें
  3. यदि अंश < 0 और हर > 0 या अंश > 0 और हर < 0, तो '-' को ans के अंत में डालें
  4. divisor := |अंश|
  5. dividend := |हर|
  6. remainder := divisor % dividend
  7. x := (divisor / dividend) को स्ट्रिंग में बदलें
  8. x के प्रत्येक कैरेक्टर को ans के अंत में डालें
  9. यदि remainder == 0, तो ans को स्ट्रिंग के रूप में वापस करें
  10. '.' को ans के अंत में डालें
  11. एक मैप m परिभाषित करें
  12. जब तक remainder != 0:
    • यदि remainder, m में नहीं है:
      • ans के शुरुआत में '(' डालें
      • ans के अंत में ')' डालें
      • लूप से बाहर निकलें
    • अन्यथा:
      • m[remainder] := ans का आकार
      • remainder := remainder * 10
      • (remainder / dividend) + '0' को ans के अंत में डालें
      • remainder := remainder % dividend
  13. ans को स्ट्रिंग के रूप में वापस करें

उदाहरण

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

class Solution {
public:
    string solve(int numerator, int denominator) {
        if (numerator == 0) return "0";
        vector<char> ans;
        if (numerator < 0 && denominator > 0 || numerator > 0 && denominator < 0)
            ans.push_back('-');
        long divisor = labs(numerator);
        long dividend = labs(denominator);
        long remainder = divisor % dividend;
        string x = to_string(divisor / dividend);
        for (int i = 0; i < x.size(); i++) {
            ans.push_back(x[i]);
        }
        if (remainder == 0) {
            return string(ans.begin(), ans.end());
        }
        ans.push_back('.');
        map<long, int> m;
        while (remainder != 0) {
            if (m.find(remainder) != m.end()) {
                ans.insert(ans.begin() + m[remainder], '(');
                ans.push_back(')');
                break;
            } else {
                m[remainder] = ans.size();
                remainder *= 10;
                ans.push_back((remainder / dividend) + '0');
                remainder %= dividend;
            }
        }
        return string(ans.begin(), ans.end());
    }
};

string solve(int numerator, int denominator) {
    return (new Solution())->solve(numerator, denominator);
}

int main() {
    cout << solve(164, 3);
}

इनपुट

164, 3

आउटपुट

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

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

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

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

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

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