购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

IQ:80 目标时间:20分钟

Q03 罗马数字的转换规则

手表的表盘上常用罗马数字。我们去国外旅行时可以发现,随处都能看到罗马数字,比如历史建筑物的表面等。如果我们不了解“转换规则”,就不知道那些数字表示的是多少。

这里,我们来研究一下罗马数字。罗马数字使用的是 表1.5 中的符号。

表1.5 阿拉伯数字和罗马数字的对照表

这个表里没有的罗马数字可通过加法的方式来表示,但这样一来,1个数就会有多种表现形式。这时,要从这些表现形式中选取用字较少的一种,并按照大数在左的规则从左往右排列。例如,27可以表示成10+10+5+1+1,所以写作XXVII。

不过,罗马数字的表现形式中还有一条规则:连续排列的相同字符,其数量要少于4(不包含4)个。举个例子,4不能写成IIII,9不能写成VIIII。这时,要通过减法运算把较小的数字写在较大的数字的左边,比如4要写成IV,9要写成IX。

另外,罗马数字能够使用的符号只到M(1000),所以它最大只能表示到3999。

问题

12个罗马数字的符号一共能表示多少个符合规则的罗马数字呢?

例如,1个符号可以表示的罗马数字有I、V、X、L、C、D、M这7个,而15个符号可以表示的罗马数字只有MMMDCCCLXXXVIII(3888)这1个。

思路

正如Hint部分提示的那样,如果能把每个阿拉伯数字都转换成罗马数字,那么只要数一数一共有多少个字符就可以了。因此,我们需要思考一下如何将阿拉伯数字转换成罗马数字。

在读数字的时候,我们会考虑数位。除了个、十、百、千这种划分方式,超过了万位的话,还可以将这些数位组合起来使用,例如将13000000读作“一千三百万”,而英语中是像ten thousand这样按千来划分的。

在把阿拉伯数字转换成罗马数字时,我们也可以试着按照数位来进行划分。首先,为了按1、10、100、1000来划分,我们要用除法求余数。当余数是4、9、40、90、…时,可以直接将阿拉伯数字转换成罗马数字。

当余数是别的数时,就要再除以5、50、500……,进一步求余数。我们按照 表1.6 这种方式整理之后会发现,颜色相同的地方,罗马数字的递增方式也一样,是有规律可循的。

表1.6 余数的规律

我们来根据这张表进行编程。具体的实现方式如代码清单03.01和代码清单03.02所示。

答案 93个 JW8d8WPjhBuRuWZ30oAtBl4qag/rWSWCR6L/7PbwwbhKY4wOK4DhXOvmWa69oIWH

点击中间区域
呼出菜单
上一章
目录
下一章
×