<力扣日常>13. 罗马数字转整数
class Solution { public: int isWhat(char a) { if (a == 'I') { return 1; } else if (a == 'V') { return 5; } else if (a == 'X') { return 10; } else if (a == 'L') { return 50; } else if (a == 'C') { return 100; } else if (a == 'D') { return 500; } else if (a == 'M') { return 1000; } else { return 0; } } int romanToInt(string s) { //首先创建七个变量来存放罗马数字 //I,V,X,L,C,D,M //对于传入的变量进行分析计算 //1.排除特殊数字 /*I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。 X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。*/ if (s == "IV") { return 4; } if (s == "IX") { return 9; } if (s == "XL") { return 40; } if (s == "XC") { return 90; } if (s == "CD") { return 400; } if (s == "CM") { return 900; } //2.遍历字符串 int sum = 0;//设置初始值 int num = 0;//设置暂存值 for (int i = 0; i < s.length(); i++) { //分别获取字符串第一二位 if (i + 1 < s.length()) { char s1 = s[i]; char s2 = s[i + 1]; if (s1 == 'I' && s2 == 'V') { sum = sum + 4; i++; } else if (s1 == 'I' && s2 == 'X') { sum = sum + 9; i++; } else if (s1 == 'X' && s2 == 'L') { sum = sum+40; i++; } else if (s1 == 'X' && s2 == 'C') { sum = sum+90; i++; } else if (s1 == 'C' && s2 == 'D') { sum += 400; i++; } else if (s1 == 'C' && s2 == 'M') { sum += 900; i++; } else { sum = sum + isWhat(s[i]); } } else { sum = sum + isWhat(s[i]); } } return sum; } };
写的跟屎山代码一样,但是运行效果意外的还不错
(PS:啦啦啦,写完收工睡觉去)