Java 中的罗马数字
本文介绍如何在 Java 中将整数转换为罗马数字。
Java 中的罗马数字
在 Java 中工作时经常需要将整数转换为罗马数字。 大多数时候,这个问题是在面试顶级 IT 公司时被问到的。
罗马数字是数字的字符表示; 我们通常可以在手表或音乐理论中找到这些数字。 罗马字符中总共有七个字母用于表示数字; 见下表:
罗马数字 | 整数 |
---|---|
I | 1 |
IV | 4 |
V | 5 |
IX | 9 |
X | 10 |
XL | 40 |
L | 50 |
XC | 90 |
C | 100 |
CD | 400 |
D | 500 |
CM | 900 |
M | 1000 |
罗马数字通常从左到右、从高到低书写。 上表表明我们不能使用罗马数字超过三次; 例如,我们会像 IV 一样写 4,但不会写 IIII。
现在让我们尝试在 Java 中创建一种将整数转换为罗马数字的方法。 请按照以下步骤操作:
- 首先,我们必须创建两个数组,一个用于罗马数字,一个用于整数。
- 然后,创建字符串生成器类的实例。
- 下一步是将整数与罗马数字进行比较。
- 如果整数 >=,则为最高的罗马数字,我们需要将其添加到字符串生成器实例中,并从输入数字中减去其值。
- 如果整数为<,则为最高的罗马数字,我们需要检查到最高的罗马数字并重复该过程,直到输入数字为0。
- 最终的字符串生成器将是转换后的罗马数字。
现在我们尝试根据上述步骤实现一个Java程序:
package jiyik;
public class Example {
public static void IntegerToRoman(int DemoInteger) {
System.out.println("The Integer Number is : " + DemoInteger);
int[] IntegerValues = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
String[] RomanValues = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
StringBuilder RomanNumber = new StringBuilder();
for(int x=0;x<IntegerValues.length;x++){
while(DemoInteger >= IntegerValues[x]){
DemoInteger = DemoInteger - IntegerValues[x];
RomanNumber.append(RomanValues[x]);
}
}
System.out.println("The Roman Numeral for given number is: " + RomanNumber.toString());
}
public static void main(String args[]){
IntegerToRoman(121);
IntegerToRoman(280);
IntegerToRoman(999);
IntegerToRoman(1000);
IntegerToRoman(1100);
}
}
上面的代码将把给定的整数转换为罗马数字。 查看输出:
The Integer Number is : 121
The Roman Numeral for given number is: CXXI
The Integer Number is : 280
The Roman Numeral for given number is: CCLXXX
The Integer Number is : 999
The Roman Numeral for given number is: CMXCIX
The Integer Number is : 1000
The Roman Numeral for given number is: M
The Integer Number is : 1100
The Roman Numeral for given number is: MC
这不是将整数转换为罗马数字的唯一方法。 我们还可以创建四个数组而不是两个; 这四个数组将用于罗马数字的个位、十位、百位和千位; 然后我们可以使用这些数组使用相同的字符串生成器方法为给定的数字生成罗马数字,请参见示例:
package jiyik;
public class Example{
public static String IntegerToRoman(int DemoIntger) {
String[] ThousandsRoman = {"", "M", "MM", "MMM"};
String[] HundredsRoman = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
String[] TensRoman = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
String[] UnitsRoman = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
return ThousandsRoman[DemoIntger / 1000] + HundredsRoman[(DemoIntger % 1000) / 100] + TensRoman[(DemoIntger % 100) / 10] + UnitsRoman[DemoIntger % 10];
}
public static void main(String args[]) {
int[] Integers = {17, 23, 48, 53, 181, 191, 147, 150, 105, 128, 199, 98, 212, 2181, 3118, 1100, 1111};
for (int DemoInteger : Integers) {
System.out.printf("Integer %4d -> Roman %8s\n", DemoInteger, IntegerToRoman(DemoInteger));
}
}
}
上面的代码将给定的整数数组一一转换为罗马数字。 查看输出:
Integer 17 -> Roman XVII
Integer 23 -> Roman XXIII
Integer 48 -> Roman XLVIII
Integer 53 -> Roman LIII
Integer 181 -> Roman CLXXXI
Integer 191 -> Roman CXCI
Integer 147 -> Roman CXLVII
Integer 150 -> Roman CL
Integer 105 -> Roman CV
Integer 128 -> Roman CXXVIII
Integer 199 -> Roman CXCIX
Integer 98 -> Roman XCVIII
Integer 212 -> Roman CCXII
Integer 2181 -> Roman MMCLXXXI
Integer 3118 -> Roman MMMCXVIII
Integer 1100 -> Roman MC
Integer 1111 -> Roman MCXI
如果您不想在代码中使用数组,那么您也可以使用映射,我们将每个整数的值及其数字放在一起,然后使用它将整数转换为罗马数字。 参见示例:
package jiyik;
import java.util.LinkedHashMap;
import java.util.Map;
public class Example {
public static String ConvertedRomanNumerals(int DemoInteger){
LinkedHashMap<String, Integer> RomanNumeralsMap = new LinkedHashMap<String, Integer>();
RomanNumeralsMap.put("M", 1000);
RomanNumeralsMap.put("CM", 900);
RomanNumeralsMap.put("D", 500);
RomanNumeralsMap.put("CD", 400);
RomanNumeralsMap.put("C", 100);
RomanNumeralsMap.put("XC", 90);
RomanNumeralsMap.put("L", 50);
RomanNumeralsMap.put("XL", 40);
RomanNumeralsMap.put("X", 10);
RomanNumeralsMap.put("IX", 9);
RomanNumeralsMap.put("V", 5);
RomanNumeralsMap.put("IV", 4);
RomanNumeralsMap.put("I", 1);
String RomanResult = "";
for(Map.Entry<String, Integer> MapEntry : RomanNumeralsMap.entrySet()){
int MatchedInteger = DemoInteger/MapEntry.getValue();
RomanResult = RomanResult+RepeatProcess(MapEntry.getKey(), MatchedInteger);
DemoInteger = DemoInteger % MapEntry.getValue();
}
return RomanResult;
}
public static String RepeatProcess(String Roman, int DemoInteger){
if(Roman == null){
return null;
}
final StringBuilder DemoRomanBuilder = new StringBuilder();
for(int i = 0; i < DemoInteger; i++) {
DemoRomanBuilder.append(Roman);
}
return DemoRomanBuilder.toString();
}
public static void main(String args[]){
for (int x = 1; x<31; x++){
System.out.println("Integer = "+x+" -> Roman = "+ConvertedRomanNumerals(x));
}
}
}
上面的代码将使用 Map 将整数转换为罗马数字。 此代码会将 1 到 30 之间的整数转换为罗马数字。 查看输出:
Integer = 1 -> Roman = I
Integer = 2 -> Roman = II
Integer = 3 -> Roman = III
Integer = 4 -> Roman = IV
Integer = 5 -> Roman = V
Integer = 6 -> Roman = VI
Integer = 7 -> Roman = VII
Integer = 8 -> Roman = VIII
Integer = 9 -> Roman = IX
Integer = 10 -> Roman = X
Integer = 11 -> Roman = XI
Integer = 12 -> Roman = XII
Integer = 13 -> Roman = XIII
Integer = 14 -> Roman = XIV
Integer = 15 -> Roman = XV
Integer = 16 -> Roman = XVI
Integer = 17 -> Roman = XVII
Integer = 18 -> Roman = XVIII
Integer = 19 -> Roman = XIX
Integer = 20 -> Roman = XX
Integer = 21 -> Roman = XXI
Integer = 22 -> Roman = XXII
Integer = 23 -> Roman = XXIII
Integer = 24 -> Roman = XXIV
Integer = 25 -> Roman = XXV
Integer = 26 -> Roman = XXVI
Integer = 27 -> Roman = XXVII
Integer = 28 -> Roman = XXVIII
Integer = 29 -> Roman = XXIX
相关文章
从Java中的链表中删除节点
发布时间:2023/07/19 浏览次数:85 分类:Java
-
本文介绍如何在 Java 中从链表中删除节点。从Java中的链表中删除节点 链表是Java的util包中的一种数据结构,它实现了链表数据结构
Java 中的自定义帮助器方法
发布时间:2023/07/19 浏览次数:177 分类:Java
-
我们创建一个帮助器类来帮助提供不是实现或实现它的类的主要目标的功能。简而言之,辅助对象是辅助类的实例。 在委托模式中,使用了相同的辅助对象。该演示将通过从头开始向您展示实
使用Java中的wait()和notify()方法
发布时间:2023/07/19 浏览次数:127 分类:Java
-
本文介绍了 Java 中的 wait() 和 notification() 方法。使用Java中的wait()和notify()方法 wait() 和 notify() 方法提供了一种允许线程等待直到满足特定条件的机制。 例如,当您想要为某些固定大小的元素后
Java Streams 中的flush()方法的使用
发布时间:2023/07/19 浏览次数:136 分类:Java
-
本文将讨论Java流中的 flush() 函数及其主要用途。Java中的flush()方法 该 Writer 流可以使用 flash() 函数进行刷新,该函数可以在 Writer 类中找到。
Java 中的重写和重载静态方法
发布时间:2023/07/19 浏览次数:156 分类:Java
-
在本文中,我们将讨论 Java 中是否可以覆盖和重载静态方法。 但在我们进一步讨论之前,让我们先明确几个关键点:Java 面向对象的本质使得重写和重载变得至关重要。 当程序员需要多功能性
Java 中可选的 ifPresent()
发布时间:2023/07/19 浏览次数:66 分类:Java
-
本文将讨论 Java 中名为 ifPresent() 的可选类方法。Java 中的可选类方法 ifPresent() 名为 ifPresent() 的可选类是一个实例方法,主要用于在该类的实例包含值时执行操作。 它是 Consumer 接口的实现。
Java 中的方法链
发布时间:2023/07/19 浏览次数:89 分类:Java
-
本篇文章介绍如何在 Java 中执行方法链。Java 中的方法链 方法链接使用点同时调用多个方法。点 . 运算符 方法链在一条语句中调用多个方法,而在一条语句中调用一系列方法。
Java迭代器remove()方法
发布时间:2023/07/17 浏览次数:117 分类:Java
-
Java 开发人员经常需要在迭代时从 ArrayList 中删除元素或对象。在本文中,我们将了解迭代器的remove()方法和集合的remove()方法的工作原理有何不同。
查找 Java 中的内存泄漏
发布时间:2023/07/17 浏览次数:96 分类:Java
-
本文将教我们如何查找Java内存泄漏。未使用的项目占用额外的内存空间称为内存泄漏。 内存泄漏是有问题的,因为它们会堵塞内存资源并随着时间的推移降低系统性能。