LoginSignup
3
0

More than 5 years have passed since last update.

アラビア数字をローマ数字に変換する

Last updated at Posted at 2018-12-07

引数のアラビア数字をローマ数字にして返す処理です。

コードとやっていること

/// 整数しかローマ数字で表現できないので引数はint
public static string ToRomanNo(int arabicNo)
{
    //0はローマ数字で表現できないので空文字を返す
    if(arabicNo == 0)
    {
        return string.Empty;
    }

    //3999より大きい数字もローマ数字で表現できないry
    if(arabicNo > 3999)
    {
        return string.Empty;
    }

    //アラビア数字とローマ数字のペアを用意する
    Dictionary<int, string> romanArabicNum = new Dictionary<int, string>();
    romanArabicNum.Add(1000, "M");
    romanArabicNum.Add(900, "CM");
    romanArabicNum.Add(500, "D");
    romanArabicNum.Add(400, "CD");
    romanArabicNum.Add(100, "C");
    romanArabicNum.Add(90, "XC");
    romanArabicNum.Add(50, "L");
    romanArabicNum.Add(40, "XL");
    romanArabicNum.Add(10, "X");
    romanArabicNum.Add(9, "IX");
    romanArabicNum.Add(5, "V");
    romanArabicNum.Add(4, "IV");
    romanArabicNum.Add(1, "I");

    //戻り値を宣言する
    string ret = string.Empty;

    //アラビア数字とローマ数字のペアを大きい値から回す
    foreach(KeyValuePair<int,string> pair in romanArabicNum)
    {
        //arabicNoをペアの数字割って商を求める
        //商=ローマ数字で出力する数となる
        int romanCount = arabicNo / pair.Key;

        //商の分の数をarabicNoから引く
        arabicNo -= romanCount * pair.Key;

        //商の数だけ、ローマ数字を戻り値に追加する
        for (int i = 0; i < romanCount; i++) 
        {
            ret += pair.Value;
        }
    }
    return ret;
}
3
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0