ローマ数字を単語で 10 進数に、またはその逆に変換または処理するにはどうすればよいですか? 私はこれをCでやりたいと思っています。アイデアは、数字または文字を取得して処理することです。
次に例を示します。
MDXXIII = One thousand five hundred and twenty-three
One thousand five hundred and twenty-one = MDXXI
ローマ数字を単語で 10 進数に、またはその逆に変換または処理するにはどうすればよいですか? 私はこれをCでやりたいと思っています。アイデアは、数字または文字を取得して処理することです。
次に例を示します。
MDXXIII = One thousand five hundred and twenty-three
One thousand five hundred and twenty-one = MDXXI
10 進数から roman への変換は非常に簡単です。その逆はもう少しトリッキーです。
ローマ数字にはいくつかの規則があります。最も一般的なものを見てみましょう:
I
1V
五X
十L
50C
百D
五百M
千II
2III
三XX
20XXX
30VI
六IV
四XI
十一DI
51CX
110XC
90ab
もしa >= b
(例: II
, VI
)ba
5b = a
または(10b = a
例: 、IV
、XD
)IX
XC
III
とIV
、XXX
およびXD
) または 4 つ (例:IIII
の代わりにIV
とのXXXX
代わりにXD
) になることもありますが、それ以上またはそれ以下になることはありません。ヒント: ある基数から別の基数への変換は、数値の最小部分から最大部分へと行うのが最適です。
これを行う簡単な方法は、ローマ数字の文字列全体を読み取り、文字列を後ろから処理することです。
例: XIV は V で始まり、= 5 1 に戻ります。今度はI です。I は V よりも小さいので、1 を引きます。つまり 4 です。次に、X に戻ると、X は I より大きいので、追加します。 10 を以前の値 (4) にすると、次のようになります。
4+10 = 14.
ステップ 1:開始
ステップ 2:ローマ数字を文字列として読み取る
ステップ 3:ローマ数字の長さを見つける
ステップ 4:文字列の各文字に対して
1. if(char = I) then decimal = 1
2. if(char = V) then decimal = 5
3. if(char = X) then decimal = 10
4. if(char = L) then decimal = 50
5. if(char = C) then decimal = 100
6. if(char = D) then decimal = 500
7. if(char = M) then decimal = 1000
8. otherwise invalid character
ステップ 5:文字列の長さまでステップ 4 を繰り返します
ステップ 6: k = char[length - 1]
ステップ 7: 10 進文字列の各文字に対して
if(decimal[i] > decimal[i - 1]) then k = k - decimal[i - 1]
else if(decimal[i] = decimal[i - 1 or decimal[i] < decimal[i - 1) then k = k + decimall[i - 1]
ステップ 8: 10 進文字列の長さまでステップ 7を繰り返す
ステップ 9: 10 進値を出力する
ステップ 10:停止