मान लीजिए कि हमारे पास दो संख्याएँ हैं जिन्हें अंश और हर कहा जाता है जो एक परिमेय संख्या (अंश / हर) का प्रतिनिधित्व करते हैं। हमें इसका दशमलव निरूपण एक स्ट्रिंग के रूप में करना है। यदि कुछ आवर्ती संख्याएँ हैं, तो उन्हें कोष्ठक से घेरें।
इसलिए, यदि इनपुट अंश =164 हर =3 की तरह है, तो आउटपुट "54.(6)" होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- यदि अंश 0 के समान है, तो −
- वापसी "0"
- एक सरणी को परिभाषित करें उत्तर
- यदि अंश <0 और हर> 0 या अंश> 0 और हर <0, तो -
- उत्तर के अंत में '-' डालें
- divisor :=|numerator|
- लाभांश :=|हर|
- शेष :=भाजक मॉड लाभांश
- x :=(भाजक / लाभांश) को स्ट्रिंग में बदलें
- इनिशियलाइज़ i :=0 के लिए, जब i
करें - उत्तर के अंत में x[i] डालें
- स्ट्रिंग के रूप में उत्तर दें
- . करें
- यदि शेषफल m में नहीं है, तो −
- सम्मिलित करें (उत्तर का पहला तत्व '(') को उत्तर में डालें उत्तर के अंत में
- सम्मिलित करें')'
- लूप से बाहर आएं
- अन्यथा −
- m[शेष] :=उत्तर का आकार
- शेष :=शेष * 10 उत्तर के अंत में
- सम्मिलित करें (शेष / लाभांश) '0' को संयोजित करें
- शेष :=शेष आधुनिक लाभांश
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#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<int, 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)