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)
-
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になります。 指定された入力の桁にベースとパワーを掛け
-
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