c_cpp 给定罗马数字,将其转换为整数,反之亦然。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 给定罗马数字,将其转换为整数,反之亦然。相关的知识,希望对你有一定的参考价值。

// suppose 1 <= 'num' <= 3999
string integer_to_roman(int num) {
    int base[] = {1,4,5,9,10,40,50,90,100,400,500,900,1000};
    // I, V, X, L, C, D, M
    // 1, 5, 10,50,100,500,1000
    string symb[] = {"I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"};
    string res = "";
    for(int i=12; i>=0; i--) {
        while(num >= base[i]) {
            num -= base[i]; // gist, continuously substract
            res += symb[i];
        }
    }
    return res;
}

int roman_to_integer(string s) {
    int res = 0;
    for(int i=0; i<s.size(); i++) {
        if(i == 0) res += convert(s[i]);
        else {
            int cur = convert(s[i]), pre = convert(s[i-1]);
            if(pre < cur) res += cur - pre - pre; // gist, substract twice the pre
            else res += cur;
        }
    }
    return res;
}

int convert(char c) {
    switch(c) {
        case 'I': return 1;
        case 'V': return 5;
        case 'X': return 10;
        case 'L': return 50;
        case 'C': return 100;
        case 'D': return 500;
        case 'M': return 1000;
        default: return 0;
    }
}

以上是关于c_cpp 给定罗马数字,将其转换为整数,反之亦然。的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中将数字转换为字符串,反之亦然

c_cpp [阵] 3sum最近。给定n个整数的数组S,在S中找到三个整数,使得总和最接近给定数字target。 Retur

给定一个整数数组,将这个数字和它后面的所有数字相加

数字电路基础

给定一个随机顺序的整数数组,您必须找到最小交换次数才能将其转换为循环排序数组

python 将给定的整数转换为罗马数字。