কম্পিউটার

C++ এ পুনরাবৃত্ত দশমিক থেকে ভগ্নাংশ


ধরুন আমাদের একটি ভগ্নাংশের লব এবং হর প্রতিনিধিত্বকারী দুটি পূর্ণসংখ্যা আছে, আমাদের স্ট্রিং বিন্যাসে ভগ্নাংশ খুঁজে বের করতে হবে। যদি ভগ্নাংশের পুনরাবৃত্তি হয়, তাহলে পুনরাবৃত্ত অংশটি বন্ধনীতে আবদ্ধ করুন। সুতরাং লব যদি 2 হয় এবং হর 3 হয়, তাহলে আউটপুট হবে “0.(6)”

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • যদি লব 0 হয়, তাহলে 0 ফেরত দিন

  • একটি অ্যারে উত্তর সংজ্ঞায়িত করুন

  • যদি লব <0 এবং হর> 0 বা লব 0 এবং হর <0, তাহলে ans অ্যারেতে ঋণাত্মক চিহ্ন ‘-’ সন্নিবেশ করান

  • ভাজক :=|অঙ্ক | এবং লভ্যাংশ :=|ডিনোমিনেটর|, অবশিষ্ট :=ভাজক মোড লভ্যাংশ

  • x :=ভাজক/ লভ্যাংশের স্ট্রিং

  • প্রতিটি অক্ষর x থেকে ans অ্যারেতে প্রবেশ করান

  • যদি অবশিষ্ট =0, তাহলে একটি স্ট্রিং হিসাবে উত্তর অ্যারে প্রদান করুন।

  • উত্তরে ডট '.' সন্নিবেশ করুন

  • একটি মানচিত্র m

    সংজ্ঞায়িত করুন
  • যখন অবশিষ্টাংশ 0

    নয়
    • যদি অবশিষ্টাংশ m এ উপস্থিত থাকে, তাহলে

      • উত্তরের m[বাকি] সূচীতে খোলা বন্ধনী সন্নিবেশ করুন

      • শেষে ans-এ বন্ধ বন্ধনী সন্নিবেশ করান

      • লুপ ভাঙ্গুন

    • অন্যথায়

      • m[remainder] :=উত্তরের আকার

      • অবশিষ্ট :=অবশিষ্ট * 10

      • উত্তরে অক্ষর হিসাবে (অবশিষ্ট / লভ্যাংশ) সন্নিবেশ করুন

      • অবশিষ্ট :=অবশিষ্ট মোড লভ্যাংশ

  • স্ট্রিং হিসাবে 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)

  1. হেক্সাডেসিমেল থেকে দশমিকের জন্য C++ প্রোগ্রাম

  2. C++ এ বাইনারি থেকে দশমিক রূপান্তরের জন্য প্রোগ্রাম

  3. 0 (শূন্য) কি - একটি দশমিক আক্ষরিক বা C++ এ একটি অক্টাল আক্ষরিক

  4. C# তে Decimal.Remainder() পদ্ধতি