罗马数字变数字(Roman to Integer)

来源:互联网 发布:c语言unicode转字符串 编辑:程序博客网 时间:2024/06/05 03:15

https://leetcode.com/problems/roman-to-integer/description/

上一题的反向出题:

思路:既然知道罗马数字里的字符都只表示千级,百级,十级.....故一个字符一个字符的扫描,将其所对应的数字相加即可。注意小的在大的前面是相减

实现:想用c++的map容器,出错。。。大神指导一下

map初始化:

#include<stdio.h>#include<algorithm>#include<iostream>#include<string.h>#include<limits.h>#include<vector>#include<map>using namespace std;int romanToInt(string s) {    map<char,int> Roman;    Roman roman;    roman = {{'I',1},                  {'V',5},                  {'X',10},                  {'L',50},                  {'C',100},                  {'D',500},                  {'M',1000}};    int integer =0;    int i;    for(i=0;i<s.length()-1;i++)    {        if(roman[s[i]]<roman[s[i]+1])            integer-=roman[s[i]];        else            integer+=roman[s[i]];    }    return integer;}int main(){    string s;    cin >> s;    int a=romanToInt(s);    printf("%d",a);}




switch AC代码

#include<stdio.h>#include<algorithm>#include<iostream>#include<string.h>#include<limits.h>#include<vector>#include<map>using namespace std;int romanSwich(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;    }}int romanToInt(string s) {    int integer =0;    int i;    for(i=0;i<s.length();i++)    {        if(i<s.length()-1&&romanSwich(s[i])<romanSwich(s[i+1]))            integer-=romanSwich(s[i]);        else            integer+=romanSwich(s[i]);    }    return integer;}int main(){    string s;    cin >> s;    int a=romanToInt(s);    printf("%d",a);}