七個羅馬字母:I(1)、V(5)、X(10)、L(50)、C(100)、D(500)、M(1000)
規則:
(1)小的數字放右邊表示相加,且V、 L、 D只能用一次;
(2)小的(只限于I、X、C)放左邊表示減去小的,且只能用一個;
(3)連寫不能超過3次;
(4)在一個數上劃橫線,表示這個數增值1000倍。
1.將十進制數(0-3999)轉換成羅馬數字
public class Solution{ public static void main(String[] args){ System.out.PRintln(intToRoman(2344)); } private static String intToRoman(int num) { String[][] c = new String[][]{ {"","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"} }; String roman = ""; roman += "" + (c[3][num / 1000 % 10]); roman += "" + (c[2][num / 100 % 10]); roman += "" + (c[1][num / 10 % 10]); roman += "" + (c[0][num % 10]); return roman; }}2.將羅馬數字轉換成十進制數(0-3999)public class Solution { public int romanToInt(String s) { Map<Character, Integer> map = new HashMap<Character, Integer>(); 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 length = s.length(); int result = map.get(s.charAt(length - 1)); for(int i = length - 1; i > 0; i--){ if(map.get(s.charAt(i)) > map.get(s.charAt(i-1))){ result -= map.get(s.charAt(i-1)); }else{ result += map.get(s.charAt(i-1)); } } return result; }}羅馬數字的記法:
I,II,III表示手指的根數(1,2,3),一只手為V(5),兩只手為X(兩個V,即10),一百(一個世紀Century)為C,C的一半為L(即50),一千為M(Mille拉丁文里的一千,和Mile很像),D為500單獨記。
新聞熱點
疑難解答