-1

ローマ数字を単語で 10 進数に、またはその逆に変換または処理するにはどうすればよいですか? 私はこれをCでやりたいと思っています。アイデアは、数字または文字を取得して処理することです。

次に例を示します。

MDXXIII = One thousand five hundred and twenty-three
One thousand five hundred and twenty-one = MDXXI
4

2 に答える 2

2

10 進数から roman への変換は非常に簡単です。その逆はもう少しトリッキーです。

ローマ数字にはいくつかの規則があります。最も一般的なものを見てみましょう:

  • 5 と 10 の倍数の記号は
    • I1
    • V
    • X
    • L50
    • C
    • D五百
    • M
  • 間の値は、同じ文字の倍数を連結することによって実行できます
    • II2
    • III
    • XX20
    • XXX30
  • 間の値は、異なる文字の倍数を連結することによって行うことができます
    • VI
    • IV
    • XI十一
    • DI51
    • CX110
    • XC90
  • 一部の組み合わせは禁止されています。より良い: 次の組み合わせのみが許可されます
    • abもしa >= b(例: II, VI)
    • ba5b = aまたは(10b = a例: 、IVXD)IXXC
  • 例外:
    • 同じ値の連結シンボルの最大数が 3 つ (例:IIIIVXXXおよびXD) または 4 つ (例:IIIIの代わりにIVとのXXXX代わりにXD) になることもありますが、それ以上またはそれ以下になることはありません。

ヒント: ある基数から別の基数への変換は、数値の最小部分から最大部分へと行うのが最適です。

于 2016-08-21T03:43:21.817 に答える
1

これを行う簡単な方法は、ローマ数字の文字列全体を読み取り、文字列を後ろから処理することです。

例: 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 進文字列の各文字に対して

  1. if(decimal[i] > decimal[i - 1]) then k = k - decimal[i - 1]

  2. 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:停止

于 2016-08-21T03:42:25.697 に答える