開發一款程序教小孩子認識羅馬數字,小孩子已經對羅馬數字非常熟悉了,但是不明白羅馬數字的加法,在[面試技能六](http://blog.csdn.net/dotnetstudio/article/details/40111043)中已經對羅馬數字的構成做了詳細描述。現在做的程序也是在面試技能六的約束下,加法的求和最大限定在3000以內。
~~~
/// <summary>
/// 羅馬數字轉十進制數
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static int ConvertRomanToDecimal(string number)
{
Dictionary<string, int> dic = new Dictionary<string, int>();
dic.Add("M", 1000);
dic.Add("CM", 900);
dic.Add("D", 500);
dic.Add("CD", 400);
dic.Add("C", 100);
dic.Add("XC", 90);
dic.Add("L", 50);
dic.Add("XL", 40);
dic.Add("X", 10);
dic.Add("IX", 9);
dic.Add("V", 5);
dic.Add("IV", 4);
dic.Add("I", 1);
int len = number.Length;
if (len == 1)
{
return dic[number];
}
if (len > 1)
{
int i = 0;
int sum = 0;
while (i < len)
{
int step = 1;
if (len - i > 1)
{
step = 2;
}
string cnum = number.Substring(i, step);
if (dic.ContainsKey(cnum))
{
sum += dic[cnum];
i = i + step;
}
else
{
sum += dic[number.Substring(i, 1)];
i = i + 1;
}
}
return sum;
}
return -1;
}
}
~~~
~~~
/// <summary>
/// 十進制轉羅馬數字
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
public static string ConvertDecimalToRoman(int number)
{
int[] decArray = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
string[] romAarry = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
int i = 0;
string output = "";
while (number > 0)
{
while (number >= decArray[i])
{
number = number - decArray[i];
output = output + romAarry[i];
}
i++;
}
return output;
}
~~~
~~~
/// <summary>
/// 加法器
/// </summary>
/// <param name="s">輸入羅馬加法公式</param>
/// <returns></returns>
public static string RomanCalculator(string s)
{
string[] array = s.Split('+');
int sum = ConvertRomanToDecimal(array[0].Trim()) + ConvertRomanToDecimal(array[1].Trim());
return ConvertDecimalToRoman(sum);
}
~~~
調用RomanCalculator()函數,輸入如下的測試數據進行測試。
Input??????????????????????????? Output
XX + II?????????????????????????? XXII
I + V????????????????????????????? VI
II + II???????????????????????????? IV
CCC + CCC?????????????? DC
D + D?????????????????????????? M