LEETCODE-Roman to Integer

来源:互联网 发布:socket文件传输java 编辑:程序博客网 时间:2024/06/06 04:05

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.
罗马数字:
罗马数字采用七个罗马字母作数字、即Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)
1、相同的数字连写,所表示的数等于这些数字相加得到的数,如 Ⅲ=3;
2、小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如 Ⅷ=8、Ⅻ=12;
3、小的数字(限于 Ⅰ、X 和 C)在大的数字的左边,所表示的数等于大数减小数得到的数,如 Ⅳ=4、Ⅸ=9;
4、在一个数的上面画一条横线,表示这个数增值 1,000 倍,如=5,000。
用罗马数字表示数的基该方法一般是把若干个罗马数字写成一列,它表示的数等于各个数字所表示的数相加的和。但是也有例外,当符号 I、X 或 C 位于大数的后面时就作为加数;位于大数的前面就作为减数。
——百度百科

#include<iostream>#include<string>using namespace std;int romanToInt(string s) {    int n = s.length();    int sum = 0;    for (int i = 0; i < n; i++) {        if(s[i] == 'I'){            if (i != (n - 1) && s[i + 1] != 'I')                sum = sum - 1;            else                sum = sum + 1;        }        if (s[i] == 'X') {            if (i != (n - 1) && s[i + 1] != 'X' && s[i + 1] != 'V' && s[i + 1] != 'I')                sum = sum - 10;            else                sum = sum + 10;        }        if (s[i] == 'C') {            if (i != (n - 1) && s[i + 1] != 'C' && s[i + 1] != 'L' && s[i + 1] != 'X' && s[i + 1] != 'V' && s[i + 1] != 'I')                sum = sum - 100;            else                sum = sum + 100;        }        if (s[i] == 'V')            sum = sum + 5;        if (s[i] == 'L')            sum = sum + 50;        if (s[i] == 'D')            sum = sum + 500;        if (s[i] == 'M')            sum = sum + 1000;    }    return sum;}int main() {    string s;    cin >> s;    int x;    x = romanToInt(s);    cout << x;}
0 0
原创粉丝点击