引数のアラビア数字をローマ数字にして返す処理です。
コードとやっていること
/// 整数しかローマ数字で表現できないので引数は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;
}