Description
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
罗马数字:罗马数字全是大写的字母
I -- 1 V--5 X -- 10 L -- 50 c -- 100 D -- 500 M -- 1000
了解更多可参看:http://romannumerals.info/roman-numerals-1-1000/
#include<stdio.h>
#include<string.h>
int romanToInt(char* s) {
int result = 0;
int i = 0;
int length = strlen(s);
int pre= (unsigned)(-1) >> 1; //初始为max int 让第一个字符对应的逻辑正确
char ch;
//printf("length = %d\n",length);
for(i=0;i<length;i++)
{
ch = s[i];
switch(ch)
{
case 'I':
if(pre > 1) //小于1不可能发生
result +=1;
pre = 1;
break;
case 'V':
if(pre < 5)
result = result+5-2*pre;
else
result +=5;
pre = 5;
break;
case 'X':
if(pre < 10)
result = result+10-2*pre;
else
result += 10;
pre = 10;
break;
case 'L':
if(pre < 50)
result = result+50-2*pre;
else
result += 50;
pre = 50;
break;
case 'C':
if(pre < 100)
result = result+100-2*pre;
else
result += 100;
pre = 100;
break;
case 'D':
if(pre < 500)
result = result+500-2*pre;
else
result += 500;
pre = 500;
break;
case 'M':
if(pre < 1000)
result = result+1000-2*pre;
else
result += 1000;
pre = 1000;
break;
default:
result = -1;
break;
}
}
return result;
}
int main(void)
{
int x;
char string[15];
gets(string);
printf("string = %s\n", string);
x= romanToInt(string);
printf("x=%d\n", x);
}