罗马数字转整数

 

罗马数字转整数

嗯,这是力扣上的一道”easy”题,拿到手来一看卧槽这啥玩意儿,不过仔细分析了一下发现这道题也不是完全不能动手。先是观察罗马数字,可以知道每一个字符对应一个数,需要注意的是I,X,C放在左右两边不同的处理。

倘若我们先忽略I,X,C放左右的差别,不考虑太多只建立程序的基本框架,思路便可以比较清晰,首先设一个sum变量作为整数的结果并初始化为0,开一个字符串读入并对其遍历,采用switch-case语句不同的字符给sum加上其对应的值。这样一个大体的程序框架就出来了,然后考虑I,X,C的左右问题,注意到它们放在右边仍然是加上其对应的值,而放在左边则是减去其对应的值,所以只要加一个判断语句,判断它在左边还是右边,在左边让sum减去其对应的值,在右边则加上其对应的值。

程序代码如下:

int romanToInt(char * s)
{
    int i,len,sum=0;
	len=strlen(s);
	for(i=0;i<len;i++)
	{
		char c=s[i];
		switch(c)
		{
			case 'I':
				if(s[i+1]=='V'||s[i+1]=='X')
				sum-=1;
				else
				sum+=1;
				break;
			case 'V':
				sum+=5;
				break;
			case 'X':
				if(s[i+1]=='L'||s[i+1]=='C')
				sum-=10;
				else
				{
					sum+=10;	
				}
				break;
			case 'L':
				sum+=50;
				break;
			case 'C':
				if(s[i+1]=='D'||s[i+1]=='M')
				sum-=100;
				else
				{
					sum+=100;
				}
				break;
			case 'D':
				sum+=500;
				break;
			case 'M':
				sum+=1000;
				break;
			default:
				break;							
		}
	}
	
	return sum;
}