Two little function can translate Roman Numerals(String) to Number(Int) and trans back.
兩個小function可以將羅馬數字(字串)轉成數字(整數)再轉回
兩個小function可以將羅馬數字(字串)轉成數字(整數)再轉回
//1990=>MCMXC
public static string IntToRoman(int num)
{
String[] m = { "", "M", "MM", "MMM" };
String[] c = { "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" };
String[] x = { "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" };
String[] i = { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" };
return m[num / 1000] + c[(num % 1000) / 100] + x[(num % 100) / 10] + i[num % 10];
}
//MCMXC=>1990
public static int RomanToInt(string s)
{
var d1 = new Dictionary<char, int> { { 'I', 1 }, { 'V', 5 }, { 'X', 10 }, { 'L', 50 }, { 'C', 100 }, { 'D', 500 }, { 'M', 1000 } };
var d2 = new Dictionary<string, int> { { "IV", 4 }, { "IX", 9 }, { "XL", 40 }, { "XC", 90 }, { "CD", 400 }, { "CM", 900 } };
int num = 0;
foreach (var d in d2)
{
if (s.Contains(d.Key))
{
num += d.Value;
s = s.Replace(d.Key, "");
}
}
foreach (var d in d1)
{
var c = s.Count(x => x == d.Key);
if (c > 0)
{
num += d.Value * c;
}
}
return num;
}
No comments:
Post a Comment