C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++での循環小数の分数


分数の分子と分母を表す2つの整数があるとすると、文字列形式で分数を見つける必要があります。小数部が繰り返されている場合は、繰り返し部分を括弧で囲みます。したがって、分子が2で分母が3の場合、出力は「0.(6)」になります。

これを解決するには、次の手順に従います-

  • 分子が0の場合、0を返します

  • 1つの配列を定義します

  • 分子<0で分母>0、または分子0で分母<0の場合は、ans配列に負の記号「-」を挿入します

  • 除数:=|分子|および被除数:=|分母|、剰余:=除数mod被除数

  • x:=除数/被除数の文字列

  • xからans配列に各文字を挿入します

  • 剰余=0の場合、ans配列を文字列として返します。

  • ドット「。」をansに挿入します

  • 1つのマップを定義するm

  • 余りは0ではありません

    • 余りがmにある場合、

      • ansのインデックスm[剰余]に開き括弧を挿入します

      • 最後に閉じ括弧をansに挿入します

      • ループを壊す

    • それ以外の場合

      • m [剰余]:=ansのサイズ

      • 余り:=余り* 10

      • (剰余/被除数)を文字としてansに挿入します

      • 剰余:=剰余mod配当

  • 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. 16進数から10進数のC++プログラム

    16進数を入力として指定すると、タスクは指定された16進数を10進数に変換することです。 コンピューターの16進数は16を底とし、10進数は10を底とし、0〜9の値で表されますが、16進数は0〜15から始まる数字で、10はA、11はB、12はC、 Dとして13、Eとして14、Fとして15。 16進数を10進数に変換するには、次の手順に従います- 余りから右から左に数字を抽出し、それを0から始まる累乗で乗算し、(桁数)–1まで1ずつ増やします。 16進数から2進数に変換する必要があるため、8進数の基数は16であるため、累乗の基数は16になります。 指定された入力の桁にベースとパワーを掛け

  2. C++での2進数から10進数への変換プログラム

    2進数を入力として指定すると、タスクは指定された2進数を10進数に変換することです。 コンピューターの10進数は10進数で表され、2進数は2進数の0と1の2つしかないため、2進数で表されますが、10進数は0〜9から始まる任意の数値にすることができます。 2進数を10進数に変換するには、右から左に向かって残りの数字を抽出し、0から始まる2の累乗を掛けて、(桁数)–1まで1ずつ増やします。乗算された値を加算し続けて、最終的な10進数値を取得します。 以下に、2進数を10進数に変換する図を示します。 例 Input-: 1010    0 will be conver