সমস্যা বিবরণ
numerator এবং denominator দেওয়া আছে। numerator/denominator-এর ডেসিম্যাল রিপ্রেজেন্টেশন স্ট্রিং হিসেবে রিটার্ন করুন। রিকারিং (আবৃত্ত) দশমিকাংশ থাকলে সেটি ব্র্যাকেটে ঘেরে দিন।
উদাহরণ: 164/3 = 54.(6)।
সমাধানের পদ্ধতি
- সাইন হ্যান্ডেল করুন (নেগেটিভ হলে
-যোগ করুন)। - পূর্ণসংখ্যা অংশ:
numerator / denominator। - ভাগশেষ
remainder = numerator % denominator। - যদি ভাগশেষ ০ হয় → পূর্ণসংখ্যা রিটার্ন করুন।
- দশমিক পয়েন্ট যোগ করুন।
- হ্যাশ ম্যাপ
remainder -> positionব্যবহার করুন। - লুপ:
remainder *= 10, ডিজিট =remainder / denominator,remainder %= denominator। - যদি ভাগশেষ রিপিট হয় → ঐ পজিশনে
(এবং শেষে)যোগ করুন।
উদাহরণ কোড
#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)) ans.push_back('-');
long divisor = labs(numerator);
long dividend = labs(denominator);
long remainder = divisor % dividend;
string x = to_string(divisor / dividend);
for (char c : x) ans.push_back(c);
if (remainder == 0) return string(ans.begin(), ans.end());
ans.push_back('.');
unordered_map<long, int> m;
while (remainder != 0) {
if (m.count(remainder)) {
ans.insert(ans.begin() + m[remainder], '(');
ans.push_back(')');
break;
}
m[remainder] = ans.size();
remainder *= 10;
ans.push_back((remainder / dividend) + '0');
remainder %= dividend;
}
return string(ans.begin(), ans.end());
}
};
int main() {
cout << solve(164, 3);
return 0;
}
ইনপুট ও আউটপুট
ইনপুট: 164, 3
আউটপুট: 54.(6)