問題
有効なローマ数字をその値に変換してください。記号は 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用に調整されています。上記の説明と制約に従ってください。