虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > Java编程 > Java实现的求解经典罗马数字和阿拉伯数字相互转换问题示例

Java实现的求解经典罗马数字和阿拉伯数字相互转换问题示例
类别:Java编程   作者:码皇   来源:互联网   点击:

这篇文章主要介绍了Java实现的求解经典罗马数字和阿拉伯数字相互转换问题,涉及java输入输出及字符串、数组的遍历与转换相关操作技巧,需要的朋友可以参考下

本文实例讲述了Java实现的求解经典罗马数字和阿拉伯数字相互转换问题。分享给大家供大家参考,具体如下:

古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来简直不能忍受,所以在现代很少使用了。之所以这样,不是因为发明表示法的人的智力的问题,而是因为一个宗教的原因,当时的宗教禁止在数字中出现0的概念!

罗马数字的表示主要依赖以下几个基本符号:

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

这里,我们只介绍一下1000以内的数字的表示法。

单个符号重复多少次,就表示多少倍。最多重复3次。比如:CCC表示300  XX表示20,但150并不用LLL表示,这个规则仅适用于I X C M。

如果相邻级别的大单位在右,小单位在左,表示大单位中扣除小单位。比如:IX表示9  IV表示4  XL表示40 更多的示例参见下表,你找到规律了吗?

I,1
II,2
III,3
IV,4
V,5
VI,6
VII,7
VIII,8
IX,9

X,10
XI,11
XII,12
XIII,13
XIV,14
XV,15
XVI,16
XVII,17
XVIII,18
XIX,19
XX,20
XXI,21
XXII,22
XXIX,29
XXX,30
XXXIV,34
XXXV,35
XXXIX,39
XL,40
L,50
LI,51
LV,55
LX,60
LXV,65
LXXX,80
XC,90
XCIII,93
XCV,95
XCVIII,98
XCIX,99

C,100
CC,200
CCC,300
CD,400
D,500
DC,600
DCC,700
DCCC,800
CM,900
CMXCIX,999

本题目的要求是:请编写程序,由用户输入若干个罗马数字串,程序输出对应的十进制表示。

输入格式是:第一行是整数n,表示接下来有n个罗马数字(n<100)。以后每行一个罗马数字。罗马数字大小不超过999。

要求程序输出n行,就是罗马数字对应的十进制数据。

例如,用户输入:

3
LXXX
XCIII
DCCII

则程序应该输出:

80
93
702

    import java.util.Scanner;
    /** * 请编写程序,由用户输入若干个罗马数字串,程序输出对应的十进制表示。 * * 输入格式是:第一行是整数n,表示接下来有n个罗马数字(n<100)。以后每行一个罗马数字。罗马数字大小不超过999。 * * 要求程序输出n行,就是罗马数字对应的十进制数据。 * * 例如,用户输入: 3 LXXX XCIII DCCII * * 则程序应该输出: 80 93 702 * * @author Administrator * */public class RomeToArabic {
    public static void main(String[] args) {
    // TODO Auto-generated method stub System.out.println("脚本之家测试结果:");
    Scanner mScanner = new Scanner(System.in);
    System.out.println(r2a(mScanner.nextLine()));
    System.out.println(a2r(mScanner.nextInt()));
    }
    /** * 把罗马数字转换为阿拉伯数字 * * @param m * @return */ public static int r2a(String m) {
    int graph[] = new int[400];
    graph['I'] = 1;
    graph['V'] = 5;
    graph['X'] = 10;
    graph['L'] = 50;
    graph['C'] = 100;
    graph['D'] = 500;
    graph['M'] = 1000;
    char[] num = m.toCharArray();
    int sum = graph[num[0]];
    for (int i = 0;
    i < num.length - 1;
    i++) {
    if (graph[num[i]] >= graph[num[i + 1]]) {
    sum += graph[num[i + 1]];
    }
    else {
    sum = sum + graph[num[i + 1]] - 2 * graph[num[i]];
    }
    }
    return sum;
    }
    /** * 把阿拉伯数字转换为罗马数字 * * @param number * @return */ public static String a2r(int number) {
    String rNumber = "";
    int[] aArray = {
    1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }
    ;
    String[] rArray = {
    "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" }
    ;
    if (number < 1 || number > 3999) {
    rNumber = "-1";
    }
    else {
    for (int i = 0;
    i < aArray.length;
    i++) {
    while (number >= aArray[i]) {
    rNumber += rArray[i];
    number -= aArray[i];
    }
    }
    }
    return rNumber;
    }
    }

运行结果:

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

您可能感兴趣的文章:

  • JAVA实现数字大写金额转换的方法
  • java实现将数字转换成人民币大写
  • Java中Boolean与字符串或者数字1和0的转换实例
  • Java编程IP地址和数字相互转换代码示例
  • Java实现的Excel列号数字与字母互相转换功能
  • java实现数字转大写的方法
  • Java常用数字工具类 数字转汉字(1)
  • java 输入一个数字,反转输出这个数字的值(实现方法)
  • Java实现数字转成英文的方法
相关热词搜索: Java 求解 罗马数字 阿拉伯数字 相互转换