<力扣日常>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:啦啦啦,写完收工睡觉去)

posted @ 2023-02-26 14:27  叶落知秋max  阅读(15)  评论(0编辑  收藏  举报