BNU4059:IVXLCDM

来源:互联网 发布:阿里巴巴农村淘宝网 编辑:程序博客网 时间:2024/05/12 17:37
罗马数字是欧洲在阿拉伯数字(实际上是印度数字)传入之前使用的一种数码,现在应用较少.它的产生晚于中国甲骨文中的数码,更晚于埃及人的十进位数字.但是,它的产生标志着一种古代文明的进步.
 
罗马数字用7个拉丁字母IVXLCDM和读数规则来表示数.
 
I = 1
V = 5
X = 10
L = 50
C = 100
D = 500
M = 1000
 
读数规则有以下三条
 
(1)相同的数字连写,所表示的数等于这些数字相加得到的数,如:III就代表3;
(2)小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数.如:VIII =8,XII=12;
(3)小的数字在大的数字的左边,所表示的数等于大数减小数得到的数,如IV=4.IX =9.
 
注意不会出现IIX这样的情况,即每个数字左边最多有一个值比它小的数字.
 
现在给你一些罗马数字表示下的数,要求你编写程序把它转换为用阿拉伯数字表示.

Input

 输入文件包含多组测试数据,每组测试数据一行,给出一个罗马数字表示的数,只包含IVXLCDM的合法组合,字母子间没有空白字符.确保转换得到的阿拉伯数字不会超过3000.

Output

 对于每一组测试数据,对应输出其阿拉伯数字表示.

Sample Input

DXII

Sample Output

512
 
就是将罗马数字转化为阿拉伯数字,要注意其转换规则
 
#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;char str[3005];int word[200];long long sum;int main(){    word['I'] = 1;    word['V'] = 5;    word['X'] = 10;    word['L'] = 50;    word['C'] = 100;    word['D'] = 500;    word['M'] = 1000;    while(~scanf("%s",str))    {        int len,i;        len = strlen(str);        sum = 0;        sum+=word[str[len-1]];        for(i = 0;i<len-1;i++)        {            if(word[str[i]]<word[str[i+1]])            sum-=word[str[i]];            else            sum+=word[str[i]];        }        printf("%lld\n",sum);    }    return 0;}

原创粉丝点击