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);
}