犯了一个严重的错误,居然忘了switch-case,在执行完一个case之后是继续向下走的!因此注意是否要在每个case中加‘break’
问题描述
罗马数字转阿拉伯数字。注意类似“4”和“9”的情况。
问题分析
想到了最简单地解决方法:从前向后遍历,遇到字母就加上对应的数字,只不过要注意‘I’等字母,看是否出现类似“4”和“9”的情况。更高效的方法暂时还没想到。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| int romanToInt(string s) { int len = s.length(); int i = 0, res = 0; while (i < len) { switch (s[i]) { case 'M': { res += 1000; break; } case 'D': { res += 500; break; } case 'C': { if (i + 1 < len) { if (s[i + 1] == 'D') { res += 400; ++i; } else if (s[i + 1] == 'M') { res += 900; ++i; } else res += 100; } else res += 100; break; } case 'L': { res += 50; break; } case 'X': { if (i + 1 < len) { if (s[i + 1] == 'L') { res += 40; ++i; } else if (s[i + 1] == 'C') { res += 90; ++i; } else res += 10; } else res += 10; break; } case 'V': { res += 5; break; } case 'I': { if (i + 1 < len) { if (s[i + 1] == 'V') { res += 4; ++i; } else if (s[i + 1] == 'X') { res += 9; ++i; } else res += 1; } else res += 1; } } ++i; } return res; }
|