罗马数字与阿拉伯数字的转换
罗马数字起源于古罗马,该数码采用七个罗马字母作数字。包含I(1),V(5),X(10),L(50),C(100),D(500),M(1000).
位置计数法,也叫位值制计数法。在该计数法中,一个数字的大小既取决于数字的大小,也取决于它的位置。
由于作为罗马数字的字母不会因为其位置的改变而改变其所对应的值,所以罗马数字并不是位置计数法。
罗马数字计数方法
这里个人根据查阅到的信息,对数字计数方法做了简略的总结。
通常,罗马数字从高位到低位书写,从左向右阅读。
1.字母之间可以叠加表示数值。
如II表示2,VI表示6;
2.V,L,D不能在一个数字中连续叠加使用;其他字母I,X,C,M至多连续重复三次。
如可以用C表示100,但不能用LL表示100。
可以将I重复三次为III表示3,但不能将I重复四次为IIII表示4;
3.可以用通过低位数与高位数间的运算表示数值。
若高位数的数值低于低位数,则用低位数减去高位数;若高位数的数值大于低位数,则用低位数加上高位数。
如IV和VI。IV由于高位的I表示的数小于低位V,就要用V减去I,即表示4;而VI由于高位的V表示的数大于低位I,就要用V加上I,即表示6.
4.不能跨十进制中的数位进行低位数减高位数的运算,且被减的数只能是I X C中的数。
简单来说,表示990不能用1000-10(因为千位和十位间有个百位),应该用900+90的形式,即CMXC.
5.在一个数的上面每画一条横线(假设是x条横线),代表这个数扩大1000^x倍。
由上法则推理知,个人的学号20221312转化为罗马数字,便是
罗马数字转阿拉伯数字的程序
经过个人研究,编写了一套代码,可以将1~3999的罗马数字转为阿拉伯数字。这里附上链接:
luomazhuanalabo.c · zhuoxue/代码学习的路途 - 码云 - 开源中国 (gitee.com)
只不过这个程序只能识别格式正确的罗马数字,不能输入错误的格式,希望在未来能够改进一下。
个人验证如下:
参考资料
1.罗马数字转换阿拉伯数字0~3999_BEconfidence的博客-CSDN博客