罗马数字转阿拉伯数字
罗马数字时位置记数法吗?
根据《计算机科学概论》可以知道,位置记数法的概念为:
位置记数法(positional notation):一种表达数字的系统,数位按顺序排列,每个数位有一个位值,数字的值是每个数位和位值的乘积之和。
又根据罗马数字转换阿拉伯数字0~3999,关于罗马数字的一些概念:
有两条须注意掌握:
1.基本数字 Ⅰ、X 、C 中的任何一个、自身连用构成数目、或者放在大数的右边连用构成数目、都不能超过三个;放在大数的左边只能用一个;
2.不能把基本数字 V 、L 、D 中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目、只能使用一个;
相同的数字连写、所表示的数等于这些数字相加得到的数、如:Ⅲ=3;
小的数字在大的数字的右边、所表示的数等于这些数字相加得到的数、 如:Ⅷ=8、Ⅻ=12;
小的数字(限于 I、X 和 C)在大的数字的左边、所表示的数等于大数减小数得到的数、如:Ⅳ=4、Ⅸ=9;
正常使用时、连写的数字重复不得超过三次;
在一个数的上面画一条横线、表示这个数扩大 1000 倍。
很明显,罗马数字根本不是位置记数法。比如数字III,是无法根据它的数位和位值的乘积算出来等于3的。
将八位学号转换成罗马数字
从链接中可知,十进制数字的范围是0~3999,但是我的学号是八位,该如何转换?
通过交流,发现:
- 十进制数字的范围是0~3999,最高四位数
- 我们的学号是八位数
- 分割成四位 四位两端,每一段均在这个范围之内
因此,决定将学号分成两个部分,四位四位一转换。
我的学号是20211408,即 2021和1408,其中:
- 2021转换成罗马数字为MMXXI
- 1408转换成罗马数字为MCDVIII
即:我的学号2021 1408 转换为罗马数字为MMXXI MCDVIII
然而,我发现一个算不上是问题的问题:
按照2021 1408进行分段,前者很正确,但是后者并非如此,说到底,我这个学号的含义是2021年入学,在1系4班,8号,本质上,我是8号,而不是1408号,因此我又试着将1408分为1、4和08进行转换
- 1转换成罗马数字为I
- 4转换为罗马数字为IV
- 08转换成罗马数字为VIII
即:此时我的学号转换为罗马数字是MMXXI I IV VIII
这样,能一眼看出我是于2021年入学,在1系4班,学号为8号
这纯粹是我的个人看法
当然,这样子分法数字转化就很简单了……
用python编写一个罗马数字转化为阿拉伯数字的程序
借鉴了蛮多网上的资料的,比如:
https://www.jb51.net/article/138306.htm
https://www.cnpython.com/qa/566044
https://www.cnblogs.com/qiuyuyu/p/9755608.html
最后上传至码云:
罗马数字转阿拉伯数字
对代码原理尝试进行了理解,暂时还未理出头绪,最终理解成果会后续继续编辑,并写在第四周学习总结里。