美文网首页
罗马数字 转换成 整型数字

罗马数字 转换成 整型数字

作者: 静水流深ylyang | 来源:发表于2018-12-07 21:10 被阅读0次

    版权声明:本文为博主原创文章,转载请注明出处。
    个人博客地址:https://yangyuanlin.club
    欢迎来踩~~~~


    • Roman To Integer
      Given a roman numeral, convert it to an integer.
      Input is guaranteed to be within the range from 1 to 3999.
    • 题目大意:给定一个罗马数字,把它转换成一个整型数字。输入的罗马数字保证是在1~3999范围内的。
    • 思路:(对照 整型数字转换成罗马数字
      首先看罗马数字与整型数字对照表
    罗马数字 整型数字
    I 1
    V 5
    X 10
    L 50
    C 100
    D 500
    M 1000

    罗马数字的基本规则是:

    1. 相同的数字连写、所表示的数等于这些数字相加得到的数、如:Ⅲ=3;
    2. 小的数字在大的数字的右边、所表示的数等于这些数字相加得到的数、 如:Ⅷ=8、Ⅻ=12;
    3. 小的数字、(限于 Ⅰ、X 和 C)在大的数字的左边、所表示的数等于大数减小数得到的数、如:Ⅳ=4、Ⅸ=9;
    4. 正常使用时、连写的数字重复不得超过三次;
    5. 在一个数的上面画一条横线、表示这个数扩大 1000 倍。
      按照这个规则就是把罗马数字的每个字符翻译成整型数字,然后按照顺序进行判断,从左到右,当后边一个大于前边一个时,就做减法运算,否则就做加法运算。
    • 代码:
    #include<iostream>
    using namespace std;
    int romanToInt(string s)
    {
        int n = s.length();
        int res = 0;
        int* num = new int[n];
        for(int i=0; i<n; i++)
        {
            switch(s[i])
            {
                case 'M':
                    num[i] = 1000;
                    break;
                case 'D':
                    num[i] = 500;
                    break;
                case 'C':
                    num[i] = 100;
                    break;
                case 'L':
                    num[i] = 50;
                    break;
                case 'X':
                    num[i] = 10;
                    break;
                case 'V':
                    num[i] = 5;
                    break;
                case 'I':
                    num[i] = 1;
                    break;
                default:
                    break;
            }
        }
        for(int i=0; i<n-1; i++)
        {
            if(num[i] < num[i+1])
                res -= num[i];
            else
                res += num[i];
        }
        res += num[n-1];
        return res;
    }
    int main()
    {
        cout<<romanToInt("IV")<<endl;
        cout<<romanToInt("VIII")<<endl;
        cout<<romanToInt("XLIV")<<endl;
        cout<<romanToInt("LXXXVIII")<<endl;
        cout<<romanToInt("CDXLIV")<<endl;
        cout<<romanToInt("DCCCLXXXVIII")<<endl;
        cout<<romanToInt("MMXIV")<<endl;
        cout<<romanToInt("MMMXVIII")<<endl;
        return 0;
    }
    
    • 运行结果:


    • 以上。

    版权声明:本文为博主原创文章,转载请注明出处。
    个人博客地址:https://yangyuanlin.club
    欢迎来踩~~~~


    相关文章

      网友评论

          本文标题:罗马数字 转换成 整型数字

          本文链接:https://www.haomeiwen.com/subject/mirthqtx.html