看完题就想到的解法(真应了那就话,首先想到的方法一定是最不好的方法)
int romanToInt(char * s){
int s_len;
s_len = strlen(s);
int i,sum=0,tem1,tem2;
char c,c2;
for(i = 0; i < s_len; i++){
c = *s;
c2 = *(s+1);
switch(c){
case 'I':
tem1 = 1;
break;
case 'V':
tem1 = 5;
break;
case 'X':
tem1 = 10;
break;
case 'L':
tem1 = 50;
break;
case 'C':
tem1 = 100;
break;
case 'D':
tem1 = 500;
break;
case 'M':
tem1 = 1000;
break;
default :
tem1=0;
break;
}
switch(c2){
case 'I':
tem2 = 1;
break;
case 'V':
tem2 = 5;
break;
case 'X':
tem2 = 10;
break;
case 'L':
tem2 = 50;
break;
case 'C':
tem2 = 100;
break;
case 'D':
tem2 = 500;
break;
case 'M':
tem2 = 1000;
break;
default :
tem2=0;
break;
}
if(tem1 < tem2){
tem1 = -tem1;
}
sum +=tem1;
s = s+1;
}
return sum;
}
参考了评论区的两个版本
int romanToInt(char * s){
int s_len;
s_len = strlen(s);
int i,sum=0,tem1,j;
char c;
int nums[s_len];
for(i = 0; i < s_len; i++){
c = *s;
nums[i]=0;
switch(c){
case 'I':
tem1 = 1;
break;
case 'V':
tem1 = 5;
break;
case 'X':
tem1 = 10;
break;
case 'L':
tem1 = 50;
break;
case 'C':
tem1 = 100;
break;
case 'D':
tem1 = 500;
break;
case 'M':
tem1 = 1000;
break;
}
s = s + 1;
nums[i]=tem1;
}
for(i=0;i<s_len-1;i++){
j=i+1;
if(nums[i]<nums[j]){
nums[i] = -nums[i];
}
}
for(i=0;i<s_len;i++){
sum += nums[i];
}
return sum;
}
int charToInt(char c)
{
char strArray[7] = {'I','V','X','L','C','D','M'};
int intArray[7] = {1,5,10,50,100,500,1000};
for(int i = 0; i < 7; i++)
{
if(strArray[i] == c)
{
return intArray[i];
}
}
return 0;
}
int romanToInt(char * s)
{
int len = strlen(s);
int v = 0;
int c,n;
for(int i = 0; i < len - 1 ; i++)
{
c = charToInt(s[i]);
n = charToInt(s[i + 1]);
v = (c < n) ? v - c : v + c;
}
v += charToInt(s[len - 1]);
return v;
}