Java实现的求解经典罗马数字和阿拉伯数字相互转换问题示例
作者:u010046914 发布时间:2023-10-15 23:17:36
本文实例讲述了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程序设计有所帮助。
来源:https://blog.csdn.net/u010046914/article/details/45792309


猜你喜欢
- 圆形头像在我们的日常使用的app中很常见,因为圆形的头像比较美观.使用圆形图片的方法可能有我们直接将图片裁剪成圆形再在app中使用,还有就是
- 本文实例讲述了Android编程实现WebView添加进度条的方法。分享给大家供大家参考,具体如下:标准的XML界面<?xml ver
- Guava Cache:⾕歌开源缓存框架Guava Cache是在内存中缓存数据,相比较于数据库或redis存储,访问内存中的数据会更加高效
- 代码如下一、创建EdgeLight.xaml代码如下。<ResourceDictionary xmlns="htt
- 引言float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近
- 今天看到已经更新了devblogs,新增的C# 11的!!(用于检查null的语法)经过非常长的讨论,最后取消了。然后我又想起来null检查
- 本文实例讲述了Java Swing实现让窗体居中显示的方法。分享给大家供大家参考,具体如下:Swing组件是AWT组建的增强组件,是功能强大
- 1. 使用try-with-resources简化文件读取操作:修改前:FileInputStream fis = null;try { &
- 0x01 创建要转换的类和主函数注意这里一定要实现序列化package day1; import java.io.Serializable;
- watch机制Zookeeper watch是一种监听通知机制,可以随时监听一些数据的变化,从而实现数据的及时性。Zookeeper所有的读
- Spring Security支持在响应中添加各种安全头默认相应安全头:Cache-Control: no-cache, no-store,
- 本文实例为大家分享了Android调用外置摄像头的具体代码,供大家参考,具体内容如下1、布局文件<?xml version="
- Object类型是所有类型的基类,其下面有ValueType类型。什么结构啊,枚举啊,都继承ValueType,这些都是值类型。其他的什么类
- Console.WriteLine("This is a Client, host name is {0}", Dns.
- 本文实例汇总了C#中@的用法,对C#程序设计来说有不错的借鉴价值。具体如下:一 字符串中的用法1.学过C#的人都知道C# 中字符串常量可以以
- 效果图如下所示:先给大家说下实现android 跳转到通讯录的实现思路:1.点击跳转到通讯录界面2.获取通讯录姓名和手机号码3.回调显示姓名
- 生成唯一值的方法很多,下面就不同环境下生成的唯一标识方法一一介绍,作为工作中的一次总结,有兴趣的可以自行测试:一、在 .NET 中生成1、直
- Java序列化是将一个对象编码成一个字节流,反序列化将字节流编码转换成一个对象。 序列化是
- 前言最近学习java,接触到了回调机制(CallBack)。初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯
- Android 中的危险权限详细整理前言:Android 中有上百种权限,现在将所有的权限归为两类:一类是普通权限一类的危险权限普通权限是指