本文实例讲述了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实现的求解经典罗马数字和阿拉伯数字相互转换问题示例...相关推荐

  1. java输出值_java参数传递(超经典)(强烈建议自己先写出程序的输出值)

    Java中的参数传递机制一直以来大家都争论不休,究竟是"传值"还是"传址(传引用)",争论的双方各执一词,互不相让.不但"菜鸟"们一头雾水, ...

  2. java 输出 三角形_Java实现输出三角形

    本来是想实现空心的,想了太久没写出来就算了 代码 package com.qaq.strruct; public class TestDemo01 { //打印三角形 //思路:空格的距离和星星的数量 ...

  3. java输出日志_java代码中如何正确使用loggger日志输出

    java代码中如何正确使用loggger日志输出 发布时间:2019-06-28作者:spider阅读(2980) 当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑打日志,良好的系统, ...

  4. java输出不同颜色_Java设计模式-策略模式、状态模式

    推荐阅读: 一只Tom猫:都是"Redis惹的祸",害我差点挂在美团三面,真是"虚惊一场"! java喵:6大面试技能树:JAVA基础+JVM+算法+数据库+计 ...

  5. java输出变量_Java笔记1: 输入输出与变量常量

    输入方法 nextLine 以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符. 可以获得空白的一串字符. import java.util.Scanner; pu ...

  6. java 输出特殊字符_java原样输出特殊符号

    String str1 = "test\test\test\test\\"; 这个语句在java里面是不好原样输出,应为"\"作为转义符号使"\t&q ...

  7. java输出一个对象_java里面直接输出一个类的对象

    Java直接输出一个类的对象的时候,会自动调用这个类的toString方法.这个方法在object类中,而所有的类都继承object类,所以所有的类都有toString方法.当我们不重写该方法时,该方 ...

  8. java输出文字_Java图形代码:输出文字,输出字符文字

    Java图形代码:输出文字,输出字符文字,本例由烈火网小编转载,由于水平有限,因此不能给出详细注释,请看下面完成的图形演示: 代码片段: Copy to Clipboard 引用的内容:[www.ve ...

  9. java输出钻石_Java:递归打印钻石

    如果给定大小,你将如何使用Java递归打印钻石? 大小为5会产生: ***** ***** **** **** *** *** ** ** * * * * ** ** *** *** **** *** ...

最新文章

  1. 手把手教你安装Linux虚拟机
  2. 谈谈机器学习的基本问题,不谈数学!
  3. 简单的Socket实现web功能
  4. iOS 之持久化存储 plist、NSUserDefaults、NSKeyedArchiver、数据库
  5. Windows SDK编程之一 窗口示例程序
  6. python可变参数和关键字参数位置_python 参数笔记 -- 位置参数 关键字参数 命名参数 形式参数 默认参数 可变参数 可选参数 位置顺序...
  7. 为什么从网页上打印怎们好像被缩放_便捷高效低成本,映美热敏云打印机CTP-180UWE体验...
  8. android:图片裁剪
  9. H264之sps解析分辨率
  10. 从Slice_Header学习H.264(三.2)--相关细节之 参考图像列表
  11. jmeter之自定义java请求性能测试
  12. 等价类划分法设计测试用例
  13. as(四级考试频度很大的几个用法)
  14. 解决 MDK 5 无法生成 .axf 文件的问题
  15. 利用canvas制作水印(兼容移动端哦)
  16. 系统架构设计方法论——TOGAF
  17. vue3编写组件的几种方式
  18. 【论文整理】小样本学习Few-shot learning论文整理收藏(最全,持续更新)
  19. 放纵,正在毁掉这一代年轻人
  20. 计算机网络HTTP篇(一)HTTP 常见面试题

热门文章

  1. SSM校园好货APP的设计与实现毕业设计源码121619
  2. H3C路由器交换机模拟器
  3. 光功率 博科交换机_希望查询7604,CE3000等交换机读取光口光功率的oid,以及电源状态的oid...
  4. QLineEdit setFocus失效问题
  5. Tomcat 可以运行但localhost:8080打不开
  6. 办公室必备-上班偷看小说利器
  7. 【定时任务】Spring Boot 定时执行任务详解,每天定时几点钟执行任务
  8. aria2搭建(CentOS 7)
  9. vue2.0支持compiler
  10. html占位符小于号,常用的一些占位符