Description
题目描述
小明非常喜欢做a+b的算术题,为此他搜集了很多的练习题。 今天他拿到一个很古老的练习册,上面是使用罗马数字表示的。 小明不太擅长处理罗马数字,请你帮帮他,告诉他罗马数字对应的十进制数的值。 罗马数字是使用字母组合表示数字的,不同的字母表示的值如下表:
字母值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
表示规则如下:
数字的值是为所有字母的值的和。比如说II=2,XIII=13
没有0,比如207使用两个100,1个5,2个1表示,即CCVII
字母应该按值的降序从左到右排列,但为了避免太多的重复(比如IIII),使用减法来缩短式子
使用I在V和X前,表示4(IV)和9(IX)
使用X在L和C前,表示40(XL)和90(XC)
使用C在D和M前,表示400(CD)和900(CM)
输入
每行输入一个罗马数字,字符串长度不超过25。测试数据保证是合法的罗马数字。
输出
每行输出对应罗马数字的十进制整数。
样例输入
MM
CM
MCD
MDX
XCIX
样例输出
2000
900
1400
1510
99
#include<stdio.h>
int main()
{
char c;
int sum=0,j=8,i;
while(scanf("%c",&c)!=EOF){
sum=0;j=8;
while(c!=10){
if(c==73){
i=1;
if(i<=j)
sum+=1;
else
sum-=1;
}
else if(c==86){
i=2;
if(j==1)
sum+=3;
else if(i<=j)
sum+=5;
else
sum-=5;
}
else if(c==88){
i=3;
if(j==1)
sum+=8;
else if(i<=j)
sum+=10;
else
sum-=10;
}
else if(c==76){
i=4;
if(j==3)
sum+=30;
else if(i<=j)
sum+=50;
else
sum-=50;
}
else if(c==67){
i=5;
if(j==3)
sum+=80;
else if(i<=j)
sum+=100;
else
sum-=100;
}
else if(c==68){
i=6;
if(j==5)
sum+=300;
else if(i<=j)
sum+=500;
else
sum-=500;
}
else if(c==77){
i=7;
if(j==5)
sum+=800;
else if(i<=j)
sum+=1000;
else
sum-=1000;
}
scanf("%c",&c);
j=i;
}
printf("%d\n",sum);
}
return 0;
}