Java实现罗马数字和阿拉伯数字的互换。注意罗马数字的定义
时间: 2024-04-23 11:24:46 浏览: 91
好的,我来回答您的问题。
Java实现罗马数字和阿拉伯数字的互换,可以通过以下步骤实现:
1. 定义一个HashMap,将罗马数字和阿拉伯数字一一对应。
2. 编写一个将罗马数字转换为阿拉伯数字的函数。从左到右遍历罗马数字,如果当前的罗马数字小于下一个罗马数字,则将当前罗马数字对应的阿拉伯数字减去,否则将当前罗马数字对应的阿拉伯数字加上。
3. 编写一个将阿拉伯数字转换为罗马数字的函数。从HashMap中查找到当前阿拉伯数字对应的最大罗马数字,将该罗马数字加到结果字符串中,再将当前阿拉伯数字减去该罗马数字对应的阿拉伯数字,重复上述步骤直到当前阿拉伯数字为0。
下面是完整的Java代码实现:
```
import java.util.HashMap;
public class RomanToInteger {
private static final HashMap<Character, Integer> map = new HashMap<Character, Integer>() {
{
put('I', 1);
put('V', 5);
put('X', 10);
put('L', 50);
put('C', 100);
put('D', 500);
put('M', 1000);
}
};
public static int romanToInt(String s) {
int result = 0;
for (int i = 0; i < s.length(); i++) {
if (i > 0 && map.get(s.charAt(i)) > map.get(s.charAt(i - 1))) {
result += map.get(s.charAt(i)) - 2 * map.get(s.charAt(i - 1));
} else {
result += map.get(s.charAt(i));
}
}
return result;
}
public static String intToRoman(int num) {
String[] roman = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
int[] value = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
StringBuilder sb = new StringBuilder();
for (int i = 0; i < roman.length; i++) {
while (num >= value[i]) {
num -= value[i];
sb.append(roman[i]);
}
}
return sb.toString();
}
public static void main(String[] args) {
String roman = "MMMCMXCIX";
int num = romanToInt(roman);
System.out.println(num);
String roman2 = intToRoman(num);
System.out.println(roman2);
}
}
```
注意,罗马数字的定义如下:
1. I、V、X、L、C、D、M 分别表示 1、5、10、50、100、500、1000。
2. 如果小数字在大数字的左边,则减去小数字;如果小数字在大数字的右边,则加上小数字。
3. 最多只能出现连续三个相同的数字。
阅读全文