罗马数字转数字

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。

最初版本

import java.util.*;

public class Main {

    public static void main(String[] args) {
        System.out.println(romanToInt("MCMXCIV"));


    }
观察题目可以知道,只有 六种两两组合的情况,全部替代成单个字母
public static int romanToInt(String s) { s = s.replace("IV","a"); s = s.replace("IX","b"); s = s.replace("XL","c"); s = s.replace("XC","d"); s = s.replace("CD","e"); s = s.replace("CM","f");// System.out.println(s); int x=0; for(int i=0;i<s.length();i++) { char ch=s.charAt(i); if(ch == 'a'){ x=x+4; } if(ch =='b'){ x=x+9; } if(ch == 'c'){ x=x+40; } if(ch == 'd'){ x=x+90; } if(ch == 'e'){ x=x+400; } if(ch == 'f'){ x=x+900; } if(ch == 'I'){ x=x+1; } if(ch == 'V'){ x=x+5; } if(ch == 'X'){ x=x+10; } if(ch == 'L'){ x=x+50; } if(ch == 'C'){ x=x+100; } if(ch == 'D'){ x=x+500; } if(ch == 'M'){ x=x+1000; } } return x; } }

修改版本

有时间再想

posted @ 2021-03-12 22:29  chenyuan#  阅读(342)  评论(0)    收藏  举报