我不正确地使用这个开关盒吗?

时间:2014-09-07 02:23:06

标签: c++ c++11

所以这个程序的想法是让用户以罗马数字的形式输入高达4999.我决定使用一个switch case来循环输入一串输入。问题是,当我输入一个像99这样的值时,XCIX会返回-101。任何帮助都很感激。

int number = 0, M = 1000, D = 500, C = 100, L = 50, X = 10, V = 5, I = 1;

for (int i = 0; i < roman.length(); i++)
{

    switch (roman[i])
    {
    case 'M': number += 1000; break;
    case 'D': if (roman[i + 1] != 'D' && i + 1 < roman.size()) 
                  number -= 500;
              else
                  number += 500;
        break;
    case 'C': if (roman[i + 1] != 'C' && i + 1 < roman.size()) 
                  number -= 100;
              else
                  number += 100;
        break;
    case 'L': if (roman[i + 1] != 'L' && i + 1 < roman.size())  
                  number -= 50;
              else
                  number += 50;
        break;
    case 'X': if (roman[i + 1] != 'X' && i + 1 < roman.size())  
                  number -= 10;
              else
                  number += 10;
        break;
    case 'V': if (roman[i + 1] != 'V' && i + 1 < roman.size())  
                  number -= 5;
              else
                  number += 5;
        break;
        case 'I':
            if (roman[i + 1] != 'I' && i + 1 < roman.size())  
                number -= 1;
            else
                number += 1;
            break;
    }

}
return number;

1 个答案:

答案 0 :(得分:5)

罗马数字只有在出现更高值的数字之前才会计算为负数。 不同是不够的。