罗马数字的构造规则

罗马数字

罗马数字是古罗马时期的计数系统,也是最早的数字表示方式,多用于钟表、日历和章节编号。一般认为,罗马数字只用来计数而不作演算。像II,IV,VII,这些都是常见的罗马数字。

构造规则

罗马数字通过7个不同字母的重复或组合,能够表示出所有正整数(罗马数字中没有0)。

  • I   =  1
  • V  =  5
  • X  =  10
  • L  =   50
  • C  =  100
  • D  =  500
  • M =  1000

1、字母是可以叠加的。

如I 表示 1,II 表示 2,III 表示 3。VI 表示 6(V=5,I=1,VI即V+I,等于6),VII 表示 7,VIII 表示 8。

2、表示为5的倍数的字母(V,L,D)不得重复。其余字母(I,X,C,M)至多可以重复3次。

(1)  如10应该表示为X,而不能是VV。再如十五应该表示为XV,而不是VVV。

(2)如4不能表示为IIII,而应该利用下一个最大的含五字符进行减操作得到,表示为IV(根据规则3,高位的I表示1,低位的V表示5,高位小于低位,因此用低位减去高位,5-1=4)。类似的,9不能表示为XIIII,因为I重复了4次。而要把它表示成10-1的形式,即IX。

3、罗马数字一般从高位到低位书写,从左向右阅读。若位于高位的数较大,则用高位的数加上低位的数;若位于高位的数较小,则用低位的数减去高位的数。

如CD和DC分别表示400和600。CD中,C在高位,它表示的数字是100,D在低位,它表示的数字是500,高位数字小于低位数字,因此用低位的D(500)减去高位的C(100),得出CD表示400;而在DC中,D在高位,数字为500,C在低位,数字为100,高位数字大于低位数字,因此高位加上低位,500+100,得出DC为600。

4、低位减去高位不能跨越一个位数且高位的数只能是I,X,C(即只能减1,减10,减100)。

(1)如99不能表示成100-1,即IC。因为C表示的100和I表示的1之间超过了一个位数。99应该表示成(100-10)+(10-1),即XCIX。

(2)如45不能表示成50-5,因为50-5要写成VL,而低位减高位,高位的数只能是I,X,C,显然V不在此列。所以45只能写成(50-10)+ 5的形式,即XLV。

5、在罗马数字的上方加上一条横线或者加上下标的?,表示将这个数乘以1000。同理,两条横线则是乘以1000000。

只要理解了以上5条规则,就能在罗马数字和阿拉伯数字之间进行任意的转换了。最后附上罗马数字对照表:

时间: 2024-11-04 22:20:38

罗马数字的构造规则的相关文章

Swift难点-继承中的构造规则实例详解

一.两种构造器-指定构造器和便利构造器 指定构造器:类中必备的构造器,为所有的属性赋初值.(有些子类可能不需要显示声明,因为默认从基类继承了) 便利构造器:类中的辅助构造器,通过调用指定构造器为属性赋初值.(仅在必要的时候声明) 举例 [plain] view plaincopy class Food { var name: String init(name: String) { self.name = name } convenience init() { self.init(name: "[

Swift难点-继承中的构造规则实例具体解释

关于继承中的构造规则是一个难点. 假设有问题,请留言问我. 我的Swift新手教程专栏 http://blog.csdn.net/column/details/swfitexperience.html 为什么要有构造器:为类中自身和继承来的存储属性赋初值. 一.两种构造器-指定构造器和便利构造器 指定构造器:类中必备的构造器.为全部的属性赋初值.(有些子类可能不须要显示声明,由于默认从基类继承了) 便利构造器:类中的辅助构造器,通过调用指定构造器为属性赋初值.(仅在必要的时候声明) 举例 cla

派生类构造函数和析构函数的构造规则

1.当基类的构造函数没有参数,或没有显示定义构造函数时,派生类可以不向基类传递参数,甚至可以不定义构造函数. 2.派生类不能继承基类的构造函数和析构函数. 3.当基类含有带参数的构造函数时,派生类必须定义构造函数,以提供把参数传递给基类构造函数的途径.转载自:http://blog.sina.com.cn/s/blog_3c6889fe0100t4cq.html

由二叉树构造赫夫曼树

赫夫曼树: 假设有n个权值{w1,w2,w3....},试构造一棵具有n个叶子节点的二叉树,每个叶子节点带权为wi,则其中带权路径长度最小的二叉树称为最优二叉树或者叫赫夫曼树. 构造赫夫曼树: 假设有n个权值,则构造出的赫夫曼树有n个叶子节点,n个权值分别设置为w1,w2,....wn,则赫夫曼树的构造规则为: 1.将w1,w2...看成是有n棵树的森林: 2.在森林中选择两个根节点的权值最小的树合并,作为一棵新树的左右子树,且新树的根节点权值为其左右子树根节点权值之和: 3.从森林中删除选取的

罗马数字

罗马数字是最古老的数字表示方式,比阿拉伯数字早2000多年,起源于罗马 罗马数字有如下符号: 计数规则: 1.相同的数字连写,所表示的数等于这些数字相加得到的数,例如:III = 3: 2.小的数字在大的数字右边,所表示的数等于这些数字相加得到的数,例如:VIII = 8; 3.小的数字,限于(I.X和C)在大的字数左边,所表示的数等于大数减去小数所得的数,例如:IV = 4; 4.正常使用时,连续的数字重复不得超过三次: 5.在一个数的上面画横线,表示这个数扩大1000倍(若只考虑3999以内

swift中构造方法和Kvc

一.引言 构造方法是一个类创建对象最先也是必须调用的方法,在Objective-C中,开发者更习惯称这类方法为初始化方法.在Objective-C中的初始化方法与普通函数相比除了要以init抬头外并无太严格的分界,而在Swift语言体系中,构造方法与普通的方法分界十分严格,从格式写法上就有不同,普通方法函数要以func声明,构造方法统一为init命名,不需要func关键字声明,不同的构造方法采用方法重载的方式创建. 二.构造方法的复写与重载 在Objective-C中,不同的初始化方法就是不同的

构造可配置词法语法分析器生成器(上)

本文为笔者原创,转载请注明出处 http://blog.csdn.net/xinghongduo 前言 源程序在被编译为目标程序需要经过如下6个过程:词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成.词法分析和语法分析是编译过程的初始阶段,是编译器的重要组成部分,早期相关理论和工具缺乏的环境下,编写词法语法分析器是很繁琐的事情.上世纪70年代,贝尔实验室的M. E. Lesk,E. Schmidt和Stephen C. Johnson分别为Unix系统编写了词法分析器生成器Le

第四十六课、继承中的构造与析构

一.子类对象的构造方法 1.子类中可以定义构造函数 2.子类构造函数:必须对继承来的成员进行初始化 (1).直接通过初始化列表或者赋值方式进行初始化(但可能继承来的是private成员) (2).调用父类构造函数进行初始化 A.默认调用:适用于无参构造函数和使用默认参数的构造函数 B.显示调用:通过初始化列表进行调用(适用于所有父类的构造函数) #include<iostream> #include<string> using namespace std; class Parent

第46课 继承中的构造与析构

1. 子类对象的构造 (1)子类中可以定义构造函数 (2)子类构造函数,必须对继承而来的成员进行初始化,有两种方式 ①直接通过初始化列表进行初始化或赋值的方式进行初始化 ②调用父类构造函数进行初始化 (3)父类构造函数在子类中调用方式 ①默认调用:适用于无参构造函数和使用默认参数的构造函数 ②显式调用:通过初始化列表进行调用,适用于所有父类构造函数 [编程实验]子类的构造初探 #include <iostream> #include <string> using namespace