C++の有理数表現から10進数を表示するプログラム
(分子/分母)の形式で有理数を表す分子と分母と呼ばれる2つの数があるとします。その10進表現を文字列として見つける必要があります。循環小数がある場合は、それらを括弧で囲みます。
したがって、入力が分子=164分母=3のような場合、出力は「54.(6)」になります。
これを解決するには、次の手順に従います-
- 分子が0と同じ場合、-
- 「0」を返す
- 配列を定義します
- 分子<0で分母>0または分子>0で分母<0の場合、-
- ansの最後に「-」を挿入
- 除数:=|分子|
- 配当:=|分母|
- 剰余:=除数mod配当
- x:=(除数/被除数)を文字列に変換
- iを初期化する場合:=0、i
- ansの最後にx[i]を挿入します
- 文字列としてansを返す
- を実行します。
- 余りがmでない場合、-
- 挿入(ansの最初の要素は'(')をansに連結します
- ansの最後に')'を挿入します
- ループから抜け出す
- それ以外の場合-
- m [remainder]:=ansのサイズ
- 剰余:=剰余* 10
- ansの最後に「0」を連結する(剰余/被除数)を挿入します
- 剰余:=剰余mod配当
例
理解を深めるために、次の実装を見てみましょう-
#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 || 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()); } }; string solve(int numerator, int denominator) { return (new Solution())->solve(numerator, denominator); } int main() { cout << solve(164, 3); }
入力
164, 3
出力
54.(6)
-
C++での10進数から16進数への変換プログラム
10進数を入力として指定すると、タスクは指定された10進数を16進数に変換することです。 コンピューターの16進数は16を底とし、10進数は10を底とし、0〜9の値で表されますが、16進数は0〜15から始まる数字で、10はA、11はB、12はC、 Dとして13、Eとして14、Fとして15。 10進数を16進数に変換するには、指定された手順に従います- まず、指定された数値を変換数値の基本値で除算します。例: 6789を16を底とする16進数に変換し、商を取得して格納する必要があるため、6789を16で除算します。余りが0〜9の場合はそのまま保存し、余りが10〜15の場合は、文字形式でA-
-
C++での10進数から2進数への変換プログラム
10進数を入力として指定すると、タスクは指定された10進数を2進数に変換することです。 コンピューターの10進数は10進数で表され、2進数は2進数の0と1の2つしかないため、2進数で表されますが、10進数は0〜9から始まる任意の数値にすることができます。 10進数を2進数に変換するには、次の手順に従います- まず、指定された数値を変換数値の基本値で除算します。例: 42を2を底とする2進数に変換し、商を取得して格納する必要があるため、42を2で除算します。余りが0の場合、ビットを0として格納します。それ以外の場合は1です。 取得した商を2進数の基数である2で除算し、ビットを格納し続けます