題目連結:a013: 羅馬數字
JAVA 程式碼
//作者:骷骷 //網誌:http://bekachu.pixnet.net/blog import java.util.Scanner; public class JAVA { private static String setR[]={"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; private static int setI[]={1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; //將所有的減法結果也納入陣列中( CM、CD、XC、XL、IX、IV ),之後只要全部當作基本元素來做就好 public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s1,s2; while(!(s1=sc.next()).equals("#")){ s2=sc.next(); System.out.println( iToR( Math.abs( rToI(s2)-rToI(s1) ) ) ); } sc.close(); } private static int setRTosetI(String s){ for(int i=0;i<setR.length;i++){ if(s.equals(setR[i])){ return setI[i]; } } return 0; } private static int rToI(String s){ int i=0; for(int j=0;j<s.length();j++){ int a=0,b=0; //a 為某一個羅馬數字的阿拉伯數字值, b 是下一個 boolean t=false; //t 代表 b 是否可以給 a 用 if (t) { a=b; t=false; } else { a=setRTosetI(String.valueOf(s.charAt(j))); } if(j<s.length()-1){ b=setRTosetI( String.valueOf( s.charAt(j+1) ) ); if(a<b){ i+=b-a; j++; //一次讀取 a、b, j 要多+1 }else{ i+=a; t=true; } }else{ i+=a; } } return i; } private static String iToR(int i){ if(i==0) return "ZERO"; String s=""; while(i>0){ for(int j=0;j<setI.length;j++){ if(setI[j]<=i){ s+=setR[j]; i-=setI[j]; j--; continue; } } } return s; } } /*測試資料: I I ZERO MM II MCMXCVIII # 備註: 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 */
==========
骷骷覺得這題難是難在對羅馬數字的規則不熟,
所以必須要 GOOGLE 一下羅馬數字的資料,
值得注意的是第 87、88 行,不會一直從頭開始做。
文章標籤
全站熱搜