关于罗马数字与整数的对应关系

来源:互联网 发布:淘宝付款人数和月销量 编辑:程序博客网 时间:2024/04/27 14:52
个位数举例
I,1 】II,2】 III,3】 IV,4 】V,5 】VI,6】 VII,7】 VIII,8 】IX,9 
·十位数举例
X,10】 XI,11 】XII,12】 XIII,13】 XIV,14】 XV,15 】XVI,16 】XVII,17 】XVIII,18】 XIX,19】 XX,20】 XXI,21 】XXII,22 】XXIX,29】 XXX,30】 XXXIV,34】 XXXV,35 】XXXIX,39】 XL,40】 L,50 】LI,51】 LV,55】 LX,60】 LXV,65】 LXXX,80】 XC,90 】XCIII,93】 XCV,95 】XCVIII,98】 XCIX,99 】
·百位数举例
C,100】 CC,200 】CCC,300 】CD,400】 D,500 】DC,600 】DCC,700】 DCCC,800 】CM,900】 CMXCIX,999】 
·千位数举例 
M,1000】 MC,1100 】MCD,1400 】MD,1500 】MDC,1600 】MDCLXVI,1666】 MDCCCLXXXVIII,1888 】MDCCCXCIX,1899 】MCM,1900 】MCMLXXVI,1976】 MCMLXXXIV,1984】 MCMXC,1990 】MM,2000 】MMMCMXCIX,3999】
·千位数以上举例
-----
CLXXX DCL,183650】
====== -----

CXXXIV CMXLV DLXXXIV,134945584】

Java代码实现罗马数字转换为整数:关键是要发现罗马数字的规律
import java.util.HashMap;
import java.util.Map;
public class romanToInt {
public static int solution(String s) {
if(s == null || s.length() == 0){
       return 0;
   }
   int pre = charToInt(s.charAt(0));
   int sum = pre;
   for(int i = 1; i < s.length(); i++){
       int cur = charToInt(s.charAt(i));
       if(pre < cur){
           sum -= 2*pre;
       }
       sum += cur;
       pre = cur;
   }
   return sum;
}
public static int charToInt(char str){
switch(str){
case 'I':return 1;
case 'V':return 5;
case 'X':return 10;
case 'L':return 50;
case 'C':return 100;
case 'D':return 500;
case 'M':return 1000;
}
return 0;
}
 
public static int solution2(String s){
   int ptr = s.length() - 1;
   int curr;
   int prev = 0;
   int result = 0;


   while(ptr >= 0) {
       curr = charToInt(s.charAt(ptr));
       result = curr >= prev ? (result + curr) : (result - curr);
       prev = curr;
       ptr--;
   }
return result;
 
}

public static void main(String[] args){
String s="XX";
System.out.println(solution2(s));
}


}


0 0
原创粉丝点击