若是凉夜已成梦

青春里 总有些事情要努力去做 总有些梦想要拼命去追。


  • 运维

  • 前端

  • 编程

  • 随笔

  • hust-oj

1322: 罗马数字转十进制

发表于 2017-10-06   |   分类于 HUSTOJ   |   阅读次数 1,226

题目描述

古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来简直不能忍受,所以在现代很少使用了。之所以这样,不是因为发明表示法的人的智力的问题,而是因为一个宗教的原因,当时的宗教禁止在数字中出现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,10
XI,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,100
CC,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

参考代码

#include<stdio.h>
int main() 
{
    int n,a,b,i,j,shu[100][100]={0},he[100]={0};
    char luo[100][100];
    scanf("%d",&n);
    for (i=1;i<=n;i++) 
    {
        scanf("%s",&luo[i]);
        for (j=0;luo[i][j]!='';j=j+2)
        {
            if(luo[i][j]=='I')
            shu[i][j]=1;
            if(luo[i][j]=='V')
            shu[i][j]=5;
            if(luo[i][j]=='X')
            shu[i][j]=10;
            if(luo[i][j]=='L')
            shu[i][j]=50;
            if(luo[i][j]=='C')
            shu[i][j]=100;
            if(luo[i][j]=='D')
            shu[i][j]=500;
            if(luo[i][j]=='M')
            shu[i][j]=1000;
            if(luo[i][j+1]=='I')
            shu[i][j+1]=1;
            if(luo[i][j+1]=='V')
            shu[i][j+1]=5;
            if(luo[i][j+1]=='X')
            shu[i][j+1]=10;
            if(luo[i][j+1]=='L')
            shu[i][j+1]=50;
            if(luo[i][j+1]=='C')
            shu[i][j+1]=100;
            if(luo[i][j+1]=='D')
            shu[i][j+1]=500;
            if(luo[i][j+1]=='M')
            shu[i][j+1]=1000;
            if(luo[i][j+1]=='')
            shu[i][j+1]=0;
            if(shu[i][j]<shu[i][j+1])
            he[i]=he[i]-shu[i][j]+shu[i][j+1];
            else
            he[i]=he[i]+shu[i][j]+shu[i][j+1];
        }
    }
        for(i=1;i<=n;i++)
    {
        printf("%dn",he[i]);
    }
}

解析

暂无

hustoj

发表评论 取消回复

邮箱地址不会被公开。 必填项已用*标注

*
*


hoxis wechat
著作权归作者所有
站点更新说明
  • 文章目录
  • 站点概览
若是凉夜已成梦

若是凉夜已成梦

青春里 总有些事情要努力去做 总有些梦想要拼命去追。

1904 日志
6 分类
12 标签
RSS
weibo github twitter facebook

友情链接

Dreams孤独患者 原站点 Skip
© 2017 若是凉夜已成梦
Powered by WordPress | 已运行
Theme By NexT.Mist