java-【计蒜客】罗马数字转换成整数

给定一个罗马数字 sss,将罗马数字转换成整数。

如罗马数字IIIIIIIVV分别代表数字 1,2,3,4,51, 2, 3, 4, 51,2,3,4,5。

首先要来了解一下罗马数字表示法,基本字符有 777 个:IVXLCDM,分别表示 111、555、101010、505050、100100100、500500500、100010001000。

在构成数字的时候,有下列规则:

1、相同的数字连写,所表示的数等于这些数字相加得到的数,如:III =3= 3=3;

2、小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:VIII =8= 8=8;XII =12= 12=12;

3、小的数字,(限于XC)在大的数字的左边,所表示的数等于大数减小数得到的数,如:IV =4= 4=4;IX =9= 9=9;

4、正常使用时,连写的数字重复不得超过三次。

输入格式

输入一个罗马数字字符串,其对应的数字为 s(1≤s≤3999)s(1 \leq s \leq 3999)s(1≤s≤3999)。

输出格式

输出对应的整数 sss。

样例输入

CXXIII

样例输出

123
import java.util.HashMap;
import java.util.Scanner;

//这里用了一下map,map其实并不难,可以简单的理解为桶结构就ok了
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String s = sc.next();
		int num = romanToInt(s);
		System.out.println(num);
		sc.close();
	}

	public static int romanToInt(String s) {
		HashMap<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 len = s.length(), result = map.get(s.charAt(len - 1));
		for (int i = len - 2; i >= 0; i--) {
			if (map.get(s.charAt(i)) < map.get(s.charAt(i + 1))) {
				result -= map.get(s.charAt(i));
			} else {
				result += map.get(s.charAt(i));
			}
		}
		return result;
	}
}

猜你喜欢

转载自blog.csdn.net/qq_41699682/article/details/85305968