C语言实现罗马数字转化为阿拉伯数字

古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来简直不能忍受,所以在现代很少使用了。之所以这样,不是因为发明表示法的人的智力的问题,而是因为一个宗教的原因,当时的宗教禁止在数字中出现0的概念!
罗马数字的表示主要依赖以下几个基本符号:
I 1 V 5
X 10
L 50
C 100
D 500
M 1000

这里,我们只介绍一下1000以内的数字的表示法。
单个符号重复多少次,就表示多少倍。最多重复3次。比如:CCC表示300 XX表示20,但150并不用LLL表示,这个规则仅适用于I X C M。
如果相邻级别的大单位在右,小单位在左,表示大单位中扣除小单位。比如:IX表示9 IV表示4 XL表示40 更多的示例参见下表,你找到规律了吗?
I,1
II,2
III,3
IV,4
V,5
VI,6
VII,7
VIII,8
IX,9

X,10XI,11
XII,12
XIII,13
XIV,14
XV,15
XVI,16
XVII,17
XVIII,18
XIX,19
XX,20
XXI,21
XXII,22
XXIX,29
XXX,30
XXXIV,34
XXXV,35
XXXIX,39
XL,40
L,50
LI,51
LV,55
LX,60
LXV,65
LXXX,80
XC,90
XCIII,93
XCV,95
XCVIII,98
XCIX,99

C,100CC,200
CCC,300
CD,400
D,500
DC,600
DCC,700
DCCC,800
CM,900
CMXCIX,999

本题目的要求是:请编写程序,由用户输入若干个罗马数字串,程序输出对应的十进制表示。
输入格式是:第一行是整数n,表示接下来有n个罗马数字(n<100)。以后每行一个罗马数字。罗马数字大小不超过999。
要求程序输出n行,就是罗马数字对应的十进制数据。
例如,用户输入:3
LXXX
XCIII
DCCII

则程序应该输出:80
93
702

注意:
请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!
在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。

请把所有函数写在同一个文件中,调试好后,存入与【考生文件夹】下对应题号的“解答.txt”中即可。
相关的工程文件不要拷入。

源代码中不能能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。

允许使用STL类库,但不能使用MFC或ATL等非ANSI c++标准的类库。例如,不能使用CString类型(属于MFC类库)。
写出方法或者解题思路,程序(具有一定可读性)都行

第1个回答  2013-04-16
等等 我写下 这题有点意思追问

呵呵,好的,我也是这么觉得,这是2012年蓝桥杯C语言大赛的倒数第二题,输出的那种格式很重要

追答

问下 990要求 用XM表示 还是用CMXC?告诉我 差不多就出来了 暂时保存一下代码

追问

后面一个,我的QQ1440418246看你辛苦了,追加50分,其实我发上去只想看看大家是怎么想这道题的,今年五月份就要去参加那个大赛,代码最好有注释,让我能看懂,还有我想邀请你加入“瓜瓜豆豆”团,加我Q吧,有什么不懂的再请教你

跪求:用c++或c 遍写 的将罗马数字转阿拉伯数字的程序代码,运行后输入一...
include<stdio.h> include<string.h> int did(char a){ if(a=='I') return 1;else if(a=='V') return 5;else if(a=='X') return 10;else if(a=='L') return 50;else if(a=='C') return 100;else if(a=='D') return 500;else if(a=='M') return 1000;else return...

C++ 罗马数字与阿拉伯数字互相转化
void main(){ static char *a[][10]={"","I","II","III","IV","V","VI","VII","VIII","IX","","X","XX","XXX","XL","L","LX","LXX","LXXX","XC","","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"}; \/*建立对照表*\/ int n,t,i,m;p...

罗马数字与阿拉伯数字的相互转换
罗马数字,古罗马人使用的数字系统,由I、V、X、L、C、D、M等基本数字组成,最多重复三次,左减右增。阿拉伯数字,古印度人发明,全世界广泛使用。两者间需要转换,适合交易场景。罗马数字转换原理:从左至右依次递减,结合特殊规则IV、IX、XL、XC、CD、CM,以及辅助数字4和9。代码实现如下。阿拉伯...

PASCAL 罗马数字 => 阿拉伯数字
i:integer;function DecToRoman( iDecimal: integer ): string;const aRomans: array [ 1..13 ] of string = ( 'I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M' );aArabics: array [ 1..13 ] of integer = ( 1, 4, 5, 9, 10...

罗马数字 CXCIX 转化成阿拉伯数字就是 199 问转换过程
C=100 XC=90 IX=9 位数从大到小分别计算,每次只算一位

C语言程序编写罗马数字翻译
switch(ALBSZ)\/\/存放阿拉伯数字的变量 { case 1: LMSZ="Ⅰ"; break;case 2: LMSZ="Ⅱ"; break;case 3: LMSZ=" Ⅲ"; break;... ... \/\/以此类推,一一对应就行了 }

怎么把罗马数字转成阿拉伯数字?
用作动词的主语,翻译为:我。5、将罗马数字II转换为阿拉伯数字2;在键盘上找到竖线符号|,通常位于英文输入状态下的反斜杠\\键旁边;按照密码中的排列方式,先打出一个2,再在其左右各打出两个竖线,即可得到IIII||II||II||I的密码。6、IIIIIIIVVVI这些都是罗马数字。

c语言里的罗马数字怎么弄
不明白你要做什么!如果是要说输入阿拉伯数字输出罗马数字的话可以用以下方法 include using namespace std;void fout(int i){ switch(i){ case 1:{ printf("I");break;} case 2:{ printf("II");break;} case 3:{ printf("III");} case 4:{ printf("IV");break;} case 5:{ print...

罗马数字转换成阿拉伯数字出了问题?!
回答:n=rand()%3999;(n小于3999) if(n == 3999) { n--;(越减差的越远) }(死循环啊)

c语言里的罗马数字怎么弄
用宏定义 define I 1 define II 2 ...define X 10 以后直接用这些罗马字母就可以了

相似回答