C++で正の整数を単語で表現するプログラム
正の整数が与えられたとしましょう。数字を単語で綴る必要があります。たとえば、入力として「56」という数字が指定されている場合、出力は「Fifty-Six」になります。変換の範囲は最大10億です。
したがって、入力がinput =5678のような場合、出力は5千六百七十八になります。
これを解決するには、次の手順に従います-
- − {{"Billion"、1000000000}、
- などのペアを含む配列の「数値」を定義します
- {"Million"、1000000}、
- {"千"、1000}、
- {"100"、100}、
- {"90"、90}、
- {"80"、80}、
- {"Seventy"、70}、
- {"Sixty"、60}、
- {"Fifty"、50}、
- {"40"、40}、
- {"30"、30}、
- {"Twenty"、20}、
- {"Nineteen"、19}、
- {"18"、18}、
- {"Seventeen"、17}、
- {"Sixteen"、16}、
- {"15"、15}、
- {"Fourteen"、14}、
- {"Thirteen"、13}、
- {"12"、12}、
- {"Eleven"、11}、
- {"Ten"、10}、
- {"Nine"、9}、
- {"Eight"、8}、
- {"Seven"、7}、
- {"Six"、6}、
- {"Five"、5}、
- {"Four"、4}、
- {"Three"、3}、
- {"Two"、2}、
- {"One"、1}}
- 関数solve()を定義します。これは入力を取ります。
- 入力が0と同じ場合、-
- 「ゼロ」を返す
- 配列番号のnumごとに、
- を実行します。
- numの2番目の値<=入力の場合、-
- numの2番目の値>=100の場合、-
- result:=solve(入力/ numの2番目の値)
- 入力>(入力/ numの2番目の値)* mの2番目の値の場合、-
- result:=result + "" + solution(input-(input / numの2番目の値))
- それ以外の場合、
- result:=numの最初の値+((入力の場合> numの2番目の値の場合: "" + solution(input-numの2番目の値)、それ以外の場合: ""))
- ループから抜け出す
- numの2番目の値>=100の場合、-
- numの2番目の値<=入力の場合、-
- 結果を返す
- 入力が0と同じ場合、-
- solve(入力)
例
理解を深めるために、次の実装を見てみましょう-
#include<bits/stdc++.h> using namespace std; vector<pair<string, int>> numbers{{"Billion", 1000000000}, {"Million", 1000000}, {"Thousand", 1000}, {"Hundred", 100}, {"Ninety", 90}, {"Eighty", 80}, {"Seventy", 70}, {"Sixty", 60}, {"Fifty", 50}, {"Forty", 40}, {"Thirty", 30}, {"Twenty", 20}, {"Nineteen", 19}, {"Eighteen", 18}, {"Seventeen", 17}, {"Sixteen", 16}, {"Fifteen", 15}, {"Fourteen", 14}, {"Thirteen", 13}, {"Twelve", 12}, {"Eleven", 11}, {"Ten", 10}, {"Nine", 9}, {"Eight", 8}, {"Seven", 7}, {"Six", 6}, {"Five", 5}, {"Four", 4}, {"Three", 3}, {"Two", 2}, {"One", 1}}; string solve(int input) { if (input == 0) return "Zero"; string result; for (auto& num : numbers) { if (num.second <= input) { if (num.second >= 100) { result = solve(input / num.second) + " " + num.first; if (input > (input / num.second) * num.second) result += " " + solve(input - (input / num.second) * num.second); } else { result = num.first + (input > num.second ? " " + solve(input - num.second) : ""); } break; } } return result; } int main() { cout<< solve(5678) <<endl; return 0; }
入力
5678
出力
Five Thousand Six Hundred Seventy Eight
-
数値を逆にするC++プログラム
数字を逆にするということは、その数字を逆の順序で保存することを意味します。 例:番号が6529の場合、9256が出力に表示されます。 数を逆にするプログラムは次のように与えられます- 例 #include <iostream> using namespace std; int main() { int num = 63972, rev = 0; while(num > 0) { rev = rev*10 + num%10; num = n
-
正の整数のビットを逆にするPythonプログラム?
まず、bin()関数を使用して数値を2進数に変換します。次に、bin()が数値の2進表現のプレフィックスとして0bを追加し、残りの部分を逆にするため、2進表現の最初の2文字をスキップします。また、文字から、左から最後から2番目の文字まで反転します。反転した2進文字列を整数に変換します。 アルゴリズム integernumber(n,bit_size) /* n is the number and bit_size is the bitsize */ Step 1: first convert number into binary . Step 2: skip the first two c