package com.vci.rmip.code.client.codeapply.Apply410;
|
|
import java.util.HashMap;
|
import java.util.Map;
|
import java.util.regex.Pattern;
|
|
public class Test {
|
public static void main(String[] args) {
|
|
String res=intToRoman(1004);
|
System.out.println("罗马数字->"+res);
|
boolean isInterger=isRomanNumber(1004+"");
|
int resInt=r2a(res);
|
System.out.println("阿拉伯数字->"+resInt);
|
}
|
public static String intToRoman(int num) {
|
int[] values={1000,900,500,400,100,90,50,40,10,9,5,4,1};
|
String[] romans={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
|
StringBuilder sb=new StringBuilder();
|
for(int i=0;i<values.length;i++){
|
while(num>=values[i]){
|
num=num-values[i];
|
sb.append(romans[i]);
|
}
|
}
|
return sb.toString();
|
}
|
|
public static String intToRomans(int num) {
|
String M[] = {"", "M", "MM", "MMM"};
|
String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
|
String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
|
String I[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
|
return M[num/1000]+C[(num%1000)/100]+X[(num%100)/10]+I[num%10];
|
}
|
/***
|
* 校验是否是罗马数字
|
* @param s
|
* @return
|
*/
|
public static boolean isRomanNumber(String s) {
|
// 检查输入的字符串是否为空
|
if (s == null || s.length() == 0) {
|
return false;
|
}
|
// 将输入的字符串转换为大写字母
|
s = s.toUpperCase();
|
// 返回结果
|
Pattern pattern = Pattern.compile("^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$");
|
return pattern.matcher(s ).matches();
|
}
|
/**
|
* 把罗马数字转换为阿拉伯数字
|
*
|
* @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;
|
}
|
}
|