码迷,mamicode.com
首页 > 编程语言 > 详细

Java-Roman to Integer

时间:2015-01-15 16:08:07      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:roman

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

将罗马数字转为阿拉伯数字 对应转换表如下:

个位数举例
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】

可以看出 基本的数字有 I V X L C D M 分别对应 1 5 10 50 100 500 1000 当前面的字母小于后面字母时 如 IV 表示 V-I当前面数字大于后面数字时 如VI 表示V+I 根据此可以遍历S求出值 代码如下:

public class Solution {
    public int romanToInt(String s) {
       int res=0;
		int prev=getRomanValue(s.charAt(0));
		res+=prev;
		for(int i=1;i<s.length();i++){
			int curv=getRomanValue(s.charAt(i));
			if(curv<=prev){
				res+=curv;;
			}else{
				res+=curv-2*prev;				
			}
			prev=curv;
		}
		return res;
    }
    public  int getRomanValue(char c) {  
        switch(c) {  
            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;  
            default: return 0;  
        }  
    }  
}


 

 

Java-Roman to Integer

标签:roman

原文地址:http://blog.csdn.net/u012734829/article/details/42741463

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!