JAVA 整数变罗马数字

如题所述

一直对古罗马数字感兴趣,借这个题学习了一下,得出

罗马数转阿拉伯数,算法伪代码:

    设输入"MCMLIV"为t,设输出数为sum=0,设最大字符数值为m=0

    从右往左遍历t中的字符,比较方便

    当遍历字符代表的值c大于等于m时,m=c且sum+=c(对应3III等的情况);否则sum减去该值c(对应4IV,9IX等情况)

    比如依次VILMCM依次对应+5, -1, +50, +1000, -100, +1000, 得1954

    遍历完输出阿拉伯数sum.


==============

阿拉伯数转罗马数,算法:

视罗马数为十进制,每数位有1,2,3,4,5,6,7,8,9共9种符号(无0)

设全进制单位为a(比如I1, X10, C100, M1000),设半进制单位为b(比如V5, L50, D500), 

分别对应固定形式表示法:

1 a; 2 aa; 3 aaa; 4 ab; 5 b; 6 ba; 7 baa; 8 baaa; 9 a(a2)

对于数字2016逐数位分解

2千 得 MM

0百 得 无

1十 得X

6得 VI

合并得MMXVI即2016

原理通了代码实现就非常简单了

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-12-08
取余,然后装换,没看错的话,只让你表示1-999,不难写
比如789
第一次取余,9,就是IX
第二次取余,8,就是XXC
其三次取余,7,就是DCC
然后拼起来输出
你要把这些规则先定义出来再进行取余装换
如果是89
第一次取余,9,就是IX
第二次取余,8,就是XXC
第三次取余,0,就是空
一样拼起来输出本回答被网友采纳

java 1-999之内的阿拉伯数字变罗马数字!
public static void main(String[] args) { Scanner sc = new Scanner(System.in);int s = Integer.parseInt(sc.next());System.out.println(toRome(s));sc.close();} \/\/ 阿拉伯数字转罗马数字:\/\/ 把所有小数字在前的组合也作为基本数字,再做一个对应的数值表就可以解决问题了。\/\/ I、...

求的值,其中a是一个数字,如2+22+222+2222+22222(此时a=2,n=5),a和...
求的值,其中a是一个数字,如2+22+222+2222+22222(此时a=2,n=5),a和n均由键盘输入。请用#include<stdio.h>main()开头来个大神 做做急啊 匿名 | 浏览1855 次 |举报 我有更好的答案推荐于2017-12-15 14:54:33 最佳答案 \/\/求的值,其中a是一个数字\/\/如2+22+222+2222+22222(此时a=2,n=5),a...

JAVA寂静岭攻略
5、6、2、12、9点的方向点击突起的罗马数字。进入钟移开后出现的洞,一直向前走 ,直到左右同时出现两扇门,进入左边的那个。里面是厨房,调查火炉的门,打开后 发现里面还有干柴。退出厨房,继续前进。见到楼梯后走右边向上的那个,一直往前 ,直到正前方有可以进入的门,进去。调查所有的厕所门,从左边...

office计算机二级,excel常考函数有哪些?
if函数 =IF(AND(F3="是",G3="是",H3="是"),"完成","未完成")这个函数的意思是,如果(同时满足(F3="是",G3="是",H3="是"),那么就是"完成“,否则就是"未完成"。还有一种情况是满足一个条件的,也就是IF(OR(F3="是",G3="是",H3="是"),"完成","未完成")。SUMIFS多条件...

相似回答