簡単 0件解決済み 正答率0%

ローマ数字の値

ローマ数字を数値に変換してください。

このチャレンジで学べること

  • 辞書で記号を値に対応付ける
  • IV や XC のような減算の組を扱う
  • 次の文字を見ながら文字列を走査する

問題

原文(英語)を表示

有効なローマ数字をその値に変換してください。記号は I=1, V=5, X=10, L=50, C=100, D=500, M=1000 です。小さい記号が大きい記号の前にある場合は減算します(例: IV = 4, CM = 900)。

roman_to_int(text) を実装してください。

入力

text: 有効なローマ数字。

出力

その値を返してください。

制約

1 ≤ 値 ≤ 3,999

例

例 1
入力:
text = "XIV"

期待される出力:
expected = 14
入力:
std::string text = "XIV";

期待される出力:
long long expected = 14;
入力:
string text = "XIV";

期待される出力:
long expected = 14;

解説

X = 10, IV = 4: 14。

例 2
入力:
text = "MCMXCIV"

期待される出力:
expected = 1994
入力:
std::string text = "MCMXCIV";

期待される出力:
long long expected = 1994;
入力:
string text = "MCMXCIV";

期待される出力:
long expected = 1994;

解説

M=1000, CM=900, XC=90, IV=4: 1994。

解き方のヒント

まずは自分で考えてから、ヒントを 1 つずつ開いてみましょう。

ヒント 1

多くの記号は足し算ですが、小さい記号の後に大きい記号が来ると引き算になります。

ヒント 2

左から右へ処理し、各記号を次の記号と比較します。

ヒント 3

最後の記号には次がないので、必ず正しく処理します。

目安の計算量

時間 O(n)、追加メモリ O(1)

参考資料

この課題はCodeUtility用に調整されています。上記の説明と制約に従ってください。

他の人の解答から学ぶ

コミュニティの解答

まだ公開された解答がありません。この課題を解いて最初の解答を共有しましょう。