मान लीजिए कि हमारे पास एक भिन्न के अंश और हर का प्रतिनिधित्व करने वाले दो पूर्णांक हैं, हमें भिन्न को स्ट्रिंग प्रारूप में खोजना होगा। यदि भिन्नात्मक भाग दोहरा रहा है, तो दोहराए जाने वाले भाग को कोष्ठकों में संलग्न करें। इसलिए यदि अंश 2 है और हर 3 है, तो आउटपुट "0.(6)" होगा
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
अगर अंश 0 है, तो 0 वापस करें
-
एक सरणी को परिभाषित करें उत्तर
-
यदि अंश <0 और हर> 0 या अंश 0 और हर <0, तो उत्तर सरणी में नकारात्मक चिह्न '-' डालें
-
भाजक :=|अंशक| और लाभांश :=|denominator|, शेष :=भाजक मॉड लाभांश
-
x :=भाजक/लाभांश की स्ट्रिंग
-
x से प्रत्येक वर्ण को उत्तर सरणी में डालें
-
यदि शेष =0 है, तो उत्तर सरणी को एक स्ट्रिंग के रूप में वापस करें।
-
उत्तर में '.' बिंदु डालें
-
एक नक्शा परिभाषित करें मी
-
जबकि शेष 0 नहीं है
-
यदि शेष m में मौजूद है, तो
-
ans के सूचकांक m[शेष] पर प्रारंभिक कोष्ठक सम्मिलित करें
-
अंत में बंद कोष्ठकों को ans में डालें
-
लूप तोड़ें
-
-
अन्यथा
-
मी [शेष] :=उत्तर का आकार
-
शेष :=शेष * 10
-
उत्तर में वर्ण के रूप में (शेष / लाभांश) डालें
-
शेष :=शेष आधुनिक लाभांश
-
-
-
उत्तर सरणी को स्ट्रिंग के रूप में लौटाएं।
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h> using namespace std; class Solution { public: string fractionToDecimal(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()); } }; main(){ Solution ob; cout << ((ob.fractionToDecimal(100,6))); }
इनपुट
100 6
आउटपुट
16.(6)