Numeral System 解説

アルゴリズムの概略

MCXI形式という文字列が2つ与えられるので,それをいったん数値に変換して和をとってから,再度MCXI形式に変換して出力します。

数値への変換は,最初は結果 result = 0 としておいて,文字列を前から見ていって値を足し合わせていけばOKです。 数字がなければ d = 1,数字があれば d = str[i] - '0' としておいて, 続く文字が 'm' であれば result += 1000 * d という感じで足していけば求まります。

MCXI形式への変換は,大きい数字から(最初は'm'から)順に見ていけばOKです。 例えば 9100 であれば 1000 の桁は 9 なので "9m" を出力し,次に 100 の桁は 1 なので "c" を出力します。 1の場合は数字を出力しないように,0の場合は何も出力しないようにするだけです。

アルゴリズムの計算量

計算量は線形(オーダーが入力文字列の長さ n に対して O(n) となる)なので問題となりません。

アルゴリズムの実装

特にありませんが,各桁の文字の情報は

char c[4] = {'m', 'c', 'x', 'i'}; // characters
int v[4] = {1000, 100, 10, 1}; // values

という風に持っておいてループを回すとプログラムの行数が短くなります。 また,数値から文字列への変換時は,いったん文字列に結果を求めてから出力するよりも, 求まった瞬間に出力していった方がプログラムが簡単になります。

$Id: index.shtml 1335 2007-03-01 09:06:39Z SYSTEM $