关键点: 临界点V判断 :如果后面一位大于前面一位,后面一位减去前面一位。
如果后面一位小于前面一位,两者相加。
public class Program {
static void Main(string [] args)
{
Console.WriteLine(romanToInt("CD"));
Console.ReadKey();
}
public static int romanToInt(String s)
{
int len = s.Length;
//字符串切分为数组
char[] str = s.ToCharArray();
int num = ChartoInt(str[0]);//最后转化出来的数字
for (int i = 0; i < len - 1; i++)
{
//将罗马数字一个一个送进来,如果左边的字符比右边的字符大,则左边的字符加上右边的字符
if (ChartoInt(str[i]) >= ChartoInt(str[i + 1]))
{
num += ChartoInt(str[i + 1]);
}
//如果左边的字符比右边的字符小,则右边的字符减去左边的字符
else
{
num -= ChartoInt(str[i]);
num += ChartoInt(str[i + 1]) - ChartoInt(str[i]);
}
}
return num;
}
static int ChartoInt(char str)
{
int num = 0;
switch (str)
{
case 'I':
num = 1;
break;
case 'V':
num = 5;
break;
case 'X':
num = 10;
break;
case 'L':
num = 50;
break;
case 'C':
num = 100;
break;
case 'D':
num = 500;
break;
case 'M':
num = 1000;
break;
}
return num;
}
}