相互轉(zhuǎn)換的過(guò)程很簡(jiǎn)單,但是首先第一步就是要搞清楚羅馬數(shù)字的規(guī)律,還是ting有意思的~~~
羅馬數(shù)字總共有七種字符,對(duì)應(yīng)的數(shù)字如下:
? ? ? ? ? ? ? ? ? I? ? ? ? ? ? ? ?1
? ? ? ? ? ? ? ? ? V? ? ? ? ? ? ? 5
? ? ? ? ? ? ? ? ? X? ? ? ? ? ? ?10
? ? ? ? ? ? ? ? ? L? ? ? ? ? ? ? ?50
? ? ? ? ? ? ? ? ? C? ? ? ? ? ? ? 100
? ? ? ? ? ? ? ? ? D? ? ? ? ? ? ? ?500
? ? ? ? ? ? ? ? ? M? ? ? ? ? ? ? 1000
如:I,II,III,IV,V,VI,VII,VIII,IX,X分別對(duì)應(yīng)1,2,3,4,5,6,7,8,9,10??梢园l(fā)現(xiàn)小于4的,就是I一直疊加,4(IV)是右邊的數(shù)減去左邊的數(shù),大于V小于X就是右邊的數(shù)加上左邊的數(shù),以此類推。。。
下面分別是羅馬數(shù)轉(zhuǎn)整數(shù)和整數(shù)轉(zhuǎn)羅馬數(shù):
import java.util.HashMap;
import java.util.Scanner;
public class RomanAndInt {
//羅馬數(shù)轉(zhuǎn)整數(shù)
public int RomanToInt(){
Scanner sc =new Scanner(System.in);
String Lnumber=sc.next();
if(Lnumber==null|| Lnumber.length()==0){
return -1;
}
HashMap map=new HashMap();
map.put('I',1);
map.put('V',5);
map.put('X',10);
map.put('L',50);
map.put('C',100);
map.put('D',500);
map.put('M',1000);
int result=map.get(Lnumber.charAt(Lnumber.length()-1));
for(int i=Lnumber.length()-2;i>=0;i--){
if(map.get(Lnumber.charAt(i))>=map.get(Lnumber.charAt(i+1))){
result+=map.get(Lnumber.charAt(i));
}else{
result-=map.get(Lnumber.charAt(i));
}
}
return result;
}
//整數(shù)轉(zhuǎn)羅馬數(shù)
public String IntToRoman(){
Scanner sc=new Scanner(System.in);
int number=sc.nextInt();
StringBuilder sb=new StringBuilder();
String[][] roman={
{"","I","II","III","IV","V","VI","VII","VIII","IX"},
{"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"},
{"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"},
{"","M","MM","MMM"}
};
sb.append(roman[3][number/1000%10]);
sb.append(roman[2][number/100%10]);
sb.append(roman[1][number/10%10]);
sb.append(roman[0][number%10]);
String?result=""+sb;
return result;
}
public static void main(String[] args){
RomanAndInt re=new RomanAndInt();
re.RomanToInt();
re.IntToRoman();
}
}