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

  1. java输出罗马数字_Java实现的求解经典罗马数字和阿拉伯数字相互转换问题示例...

    本文实例讲述了Java实现的求解经典罗马数字和阿拉伯数字相互转换问题.分享给大家供大家参考,具体如下: 古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来 ...

  2. 月份java题_Java基础50道经典练习题(14)——求日期

    package com.homework.test; import java.util.*; /* [程序 14 求日期] 题目:输入某年某月某日,判断这一天是这一年的第几天? 程序分析:以 3 月 ...

  3. java 姓名_Java生成随机姓名、性别和年龄的实现示例

    一.定义实体类Person,封装生成的数据 package net.dc.test; public class Person { private String name; private String ...

  4. 倒金字塔java语言_java打印正金字塔,倒金字塔和“水影”金字塔(示例代码)

    package com.javase.demo; import java.util.Scanner; /** * 金字塔 * @author Mr.Zhang * */ public class Py ...

  5. python罗马数字转换,Python3.5实现的罗马数字转换成整数功能示例

    本文实例讲述了Python3.5实现的罗马数字转换成整数功能.分享给大家供大家参考,具体如下: 问题概述: 给定一个罗马数字 ,将罗马数字转换成整数. 如罗马数字I,II,III,IV,V分别代表数字 ...

  6. java书籍_Java学习必备书籍(快来收藏)

    Hello,everyone! 今天圆圆煞费苦心的从JavaGuide.CSDN.豆瓣读书等平台搜索相关信息为大家整理了一份学习<Java的必备书籍>精华推荐,希望能够帮助更多的热爱Jav ...

  7. 【源码+教程】Java课设项目_12款最热最新Java游戏项目_Java游戏开发_Java小游戏_飞翔的小鸟_王者荣耀_超级玛丽_推箱子_黄金矿工_贪吃蛇

    马上就要期末了,同学们课设做的如何了呢?本篇为大家带来了12款热门Java小游戏项目的源码和教程,助力大家顺利迎接暑假![源码+教程]Java课设项目_12款最热最新Java游戏项目_Java游戏开发 ...

  8. 重拾java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

  9. 毕向东—Java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

  10. 三种算法求解经典N皇后问题

    三种算法求解经典N皇后问题 [问题描述] 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题.该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击, ...

最新文章

  1. C# Email邮件发送,功能是密码找回或者重置功能。
  2. Boost:是否支持sse4.1指令的测试程序
  3. tab enter键出现
  4. 如何:将 TraceSource 和筛选器与跟踪侦听器一起使用(转载)
  5. mysql select 子查询_SELECT中常用的子查询操作
  6. 华为云mysql端口号_华为云云耀服务器远程连接mysql,报错10038端口配置问题。
  7. unity, itween 对不透明对象使用FadeTo需要先更换material
  8. 拓端tecdat|python安娜卡列妮娜词云图制作
  9. NTFS文件系统详细分析
  10. 30个精品Python练手项目
  11. Java权限管理系统完整案例
  12. 吉林大学超星MOOC高级语言程序设计 实验06 (2021级)
  13. c#获取网口扫描枪数据
  14. Netty工作原理最详细分析
  15. 计算机c类地址是什么,ip地址中属于c类地址的是什么
  16. C# Bitmap GetPixel 效率太低,太慢的替代方法
  17. LT-mapper,LT-removert代码运行与学习
  18. mysql分布式如何实现原理_mysql分布式集群实现原理
  19. Windows系统DOS命令之多线程技术
  20. 嫖娼是犯罪吗?嫖娼被抓怎么处罚

热门文章

  1. html简述四种基本标记的作用,HTML的常用标记
  2. 局域网下两台电脑ping不通的问题
  3. cups ipp oracle,使用 CUPS 打印管理器管理打印机
  4. AndroidX使用
  5. 腾讯云服务器如何选择配置?
  6. 二十一世纪大学英语读写教程学习笔记(原文)——1 - Secrets of A Students(优秀学生的秘密)
  7. 提高迅雷下载速度 超好用,下载速度实实在在的提高了!
  8. 西北农林科技大学计算机导师,信息工程学院-西北农林科技大学
  9. ctfshow 做题 MISC入门 模块1-10
  10. photoshop cs6中画虚线的设置