整数转罗马字
package www.algorithm.integerandroman;
import java.util.Scanner;
public class InttoRoman {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.println("please input a number within the range from 1 to 3999");
int number=sc.nextInt();
System.out.print(IntToRoman(number));
}
public static String IntToRoman(int num){
String[] romanpart={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
int[] numpart={1000,900,500,400,100,90,50,40,10,9,5,4,1};
String roman="";
int i=0;
while(num!=0&&num<=3999){
if(num>=numpart[i]){
num-=numpart[i];
roman+=romanpart[i];
}else
i++;
}
return roman;
}
}
罗马字转整数
package www.algorithm.integerandroman;
import java.util.Scanner;
public class RomanToInteger {
public static void main(String[] args){
System.out.println("please input the roman:");
Scanner sc=new Scanner(System.in);
String roman=sc.next();
try {
System.out.println(getNum(roman));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static int getNum(String roman) throws Exception{
int num=0;
int lastpart=0;
for(int i=0;i<roman.length();i++){
int thispart=getIntOfRomanPart(roman.charAt(i));
if(thispart>lastpart)
num=num+thispart-2*lastpart;
else
num+=thispart;
lastpart=thispart;
}
return num;
}
private static int getIntOfRomanPart(char romanpart) throws Exception{
int part=0;
switch(romanpart){
case 'I':part=1;break;
case 'V':part=5;break;
case 'X':part=10;break;
case 'L':part=50;break;
case 'C':part=100;break;
case 'D':part=500;break;
case 'M':part=1000;break;
default : throw new Exception("罗马字不合法");
}
return part;
}
}