ধরা যাক দুটি ইন্টিজার দেওয়া আছে যা একটি ভগ্নাংশের নামেরেটর (numerator) এবং ডিনোমিনেটর (denominator) রিপ্রেজেন্ট করে, আমরা ভগ্নাংশটিকে স্ট্রিং ফরম্যাটে রূপান্তর করব। যদি ভগ্নাংশের অংশটি রিপিট হয়, তবে রিপিটিং অংশকে পারেনথেসিস দিয়ে ঘেরাব। যদি নামেরেটর 2 এবং ডিনোমিনেটর 3 হয়, তবে আউটপুট হবে "0.(6)"।
সমাধানের ধাপগুলো −
যদি নামেরেটর 0 হয়, তবে "0" রিটার্ন করব
ans নামে একটি অ্যারে সংজ্ঞা করব
যদি নামেরেটর < 0 এবং ডিনোমিনেটর > 0 হয় বা নামেরেটর > 0 এবং ডিনোমিনেটর < 0 হয়, তবে ans অ্যারেতে '-' চিহ্ন ইনসার্ট করব
divisor := |numerator| এবং dividend := |denominator|, remainder := divisor % dividend
x := divisor / dividend-এর স্ট্রিং
x-এর প্রতিটি ক্যারেক্টার ans অ্যারেতে ইনসার্ট করব
যদি remainder = 0 হয়, তবে ans অ্যারেকে স্ট্রিং হিসেবে রিটার্ন করব।
ans-এ '.' ইনসার্ট করব
m নামে একটি ম্যাপ সংজ্ঞা করব
যখন remainder 0 নয়
যদি remainder m-এ থাকে, তবে
ans-এ m[remainder] ইনডেক্সে '(' ইনসার্ট করব
ans-এ শেষে ')' ইনসার্ট করব
লুপ ব্রেক করব
অন্যথায়
m[remainder] := ans-এর আকার
remainder := remainder * 10
ans-এ (remainder / dividend) ক্যারেক্টার হিসেবে ইনসার্ট করব
remainder := remainder % dividend
ans অ্যারেকে স্ট্রিং হিসেবে রিটার্ন করব।
নিচের ইমপ্লিমেন্টেশন দেখুন −
উদাহরণ
#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)