记数方法

古罗马数字基本符号

基本字符

I

V

X

L

C

D

M

相应的阿拉伯数字表示为

1

5

10

50

100

500

1000

  1. 相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ=3;

  2. 小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ=8、Ⅻ=12;

  3. 小的数字(限于 I、X 和 C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ=4、Ⅸ=9;

  4. 正常使用时,连写的数字重复不得超过三次;

  5. 在一个数的上面画一条横线,表示这个数扩大 1000 倍。

组数规则

有两条须注意掌握:

  1. 基本数字 Ⅰ、X 、C 中的任何一个,自身连用构成数目,或者放在大数的右边连用构成数目,都不能超过三个;放在大数的左边只能用一个;

  2. 不能把基本数字 V 、L 、D 中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目,只能使用一个。

对照举例

个位数举例

Ⅰ-1、Ⅱ-2、Ⅲ-3、Ⅳ-4、Ⅴ-5、Ⅵ-6、Ⅶ-7、Ⅷ-8、Ⅸ-9

十位数举例

Ⅹ-10、Ⅺ-11、Ⅻ-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、XLV-45、XLIX(IL)-49、L-50、LI-51、LV-55、LX-60、LXV-65、LXXX-80、XC-90、XCIII-93、XCV-95、XCVIII-98、XCIX(IC)-99

百位数举例

C-100、CC-200、CCC-300、CD-400、CDXC(XD)-490、CDXCV-495、CDXCIX-499、D-500、DC-600、DCC-700、DCCC-800、CM-900、CMXCIX-999

千位数举例

M-1000、MC-1100、MCD-1400、MD-1500、MDC-1600、MDCLXVI-1666、MDCCCLXXXVIII-1888、MDCCCXCIX(MDCCCIC)-1899、MCM-1900、MCMLXXVI-1976、MCMLXXXIV-1984、MCMXC(MXM)-1990、MM-2000、MMMCMXCIX(MMMIM)-3999

实现举例

1.正序加减法

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>//罗马数字转阿拉伯数字
char stdname[] = {'I','V','X','L','C','D','M'};
int  stdval[] = {1,5,10,50,100,500,1000};//根据阿拉数字获取stdname的下标
int L(char c){for(int i=0;i<sizeof(stdname);i++){if(c == stdname[i])return i;}printf("L() function input error!\n");return -1;
}//根据当前位置后面的字符判断加减本值
int wich_dir(char *ptr,int len){char c = *(char *)ptr;char *p = (char *)ptr;while(len-->0){if(L(*p) > L(c)){return 0;}p++;}return 1;
}//主函数
int main(int argc,char ** argv){if(argc != 2){printf("参数必填\n");return 1;}int len = strlen(argv[1]);int result = 0 ;int i = 0;int dir = 1;char * start = (char *)argv[1];do{dir = wich_dir((char *)start,len);      int index = L(*(char *)start);if(dir)      result += stdval[index];else  result -= stdval[index];start++;}while(--len>0);printf("result=%d\n",result);return 0;
}

2.倒叙加减法

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>//罗马数字转阿拉伯数字
char stdname[] = {'I','V','X','L','C','D','M'};
int  stdval[] = {1,5,10,50,100,500,1000};//根据阿拉数字获取stdname的下标
int L(char c){for(int i=0;i<sizeof(stdname);i++){if(c == stdname[i])return i;}printf("L() function input error!\n");return -1;
}//根据当前位置后面的字符判断加减本值
int wich_dir(char *origin ,char *ptr){char c = *(char *)ptr;char *p = (char *)ptr;while(origin >= p){if(L(*p) > L(c)){return 0;}p++;}return 1;
}//主函数
int main(int argc,char ** argv){if(argc != 2){printf("参数必填\n");return 1;}char * deduct_ptr = argv[1];int len = strlen(argv[1]);deduct_ptr += len - 1;int result = 0 ;int i = 0;int dir = 1;char * start = (char *)argv[1]+len-1;do{dir = wich_dir(start,(char *)deduct_ptr);       if(dir)     result += stdval[L(*(char *)deduct_ptr)];else result -= stdval[L(*(char *)deduct_ptr)];deduct_ptr--;}while(--len>0);printf("result=%d\n",result);return 0;
}

罗马数字转阿拉伯数字两种实现相关推荐

  1. 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。例如, 罗马数字 2 写做 II ,即为两个并列的 1

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并 ...

  2. 罗马数字与阿拉伯数字的相互转换

      最近遇到一道非常有趣的题目,题目大意如下:有一个富翁在银河系里做生意,而银河系使用的是罗马数字,所以他需要一个精明能干的助手,帮助他完成罗马数字与阿拉伯数字的相互转换,题目在这个背景下衍生出交易场 ...

  3. python罗马数字转换阿拉伯数字_20202427-张启辰《Python3初学:罗马数字转阿拉伯数字》...

    20202427-张启辰<Python3初学:罗马数字转阿拉伯数字> 1.规则 罗马数字是古罗马使用的一种记数系统,在阿拉伯数字传入之前使用较为普遍,目前大家可能在钟表.日历.文章的排序 ...

  4. 罗马数字和阿拉伯数字之间的转换

    问题描述:把我们常见的阿拉伯数字转化为罗马数字的形式. 拓展:两种形式的相互转换. 思路:将阿拉伯数字拆分为能够被罗马数字整除的形式(比如100.500等),再整合到一起,然后替换字符为我们需要的形式 ...

  5. 罗马数字与阿拉伯数字互转

    来源于 LeetCode Roman to Integer 描述: Given a roman numeral, convert it to an integer. Input is guarante ...

  6. 罗马数字转换的几种方法 python123平台

    罗马数字转换的几种方法 python123平台 题目要求: 将一个罗马数字转换成十进制整数输出,其中,罗马数字的范围为1~3999.‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬ ...

  7. Word设置两种页码

    设置两种页码 word 写毕业论文遇到一问题,开始的引言和目录的部分用罗马数字的Ⅰ.Ⅱ.Ⅲ标页码,然后正文的部分用阿拉伯数字从1.2.3.4开始标 把光标定位在需要使用阿拉伯数字作为页码格式的那一页: ...

  8. leetcode:13、罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

    一.题目:13.罗马数字包含以下七种字符: I, V, X, L,C,D 和 M.题目链接 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 ...

  9. 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符          数值 I             1 V             5 X             10 L ...

最新文章

  1. 计算机视觉一些项目实战技术(续)
  2. python数据框 命名_Python-根据列值将数据框分为多个数据框,并用这些值命名 - python...
  3. java 上下文加载器_如何将JDK6 ToolProvider和JavaCompiler与上下文类加载器一起使用?...
  4. 鸿蒙系统太烂,一加终于觉醒!变相承认系统太烂,魅族的吐槽一针见血
  5. mysql管理器源码_一个HelloWorld版的MySQL数据库管理器的设计与实现(源码)
  6. 通信与计算机技术的联系,通信技术与计算机技术融合发展论文
  7. 1.7 编程基础之字符串 14 大小写字母互换 python
  8. kubernetes怎么读_Kubernetes之有状态应用实践-搭建MySQL集群
  9. linux下的C语言开发(静态库)
  10. 在职场想要涨薪升职,需要打造个人品牌
  11. php preserve keys,PHP常用的数组函数
  12. 数据分析和数据挖掘相关模块
  13. 电脑指定区域旋转_诸城全自动旋转门批发,医用病房门,请看
  14. C语言: 输出一个图形
  15. python数字字母识别_字符图像识别——数字字母混合
  16. 【虚幻引擎4(UE4)实用技巧】-关于高亮显示物体轮廓线
  17. 6-6 采用邻接表创建无向图
  18. 设置centos7.3的YUM源为国内阿里云源
  19. 我的世界Java版最大村庄_我的世界:java版完美种子,开局两村庄齐铁套
  20. 利用mininet进行链路拥塞造成数据丢包的实验

热门文章

  1. 安卓进不去系统如何备份数据
  2. 计算机专业英语中tour的意思,计算机专业英语自我介绍
  3. Tita 绩效管理:低质量周会的7个表现
  4. 秉火429笔记之八 RCC时钟
  5. 我的一加5刷机基本步骤
  6. 解决vue3中echarts的tooltip组件不显示的问题
  7. Linux/Unix开发之make和makefile详解
  8. HTML期末学生大作业-拯救宠物网页作业html+css
  9. 如何写好一篇毕业论文?
  10. 钉钉这两年:陈航自我迭代 阿里社交进击