题目
1.题目描述
古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来简直不能忍受,所以在现代很少使用了。之所以这样,不是因为发明表示法的人的智力的问题,而是因为一个宗教的原因,当时的宗教禁止在数字中出现 0 的概念!
罗马数字的表示主要依赖以下几个基本符号:
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
2.输入描述
第一行是整数 n,表示接下来有 n 个罗马数字。
以后每行一个罗马数字。罗马数字大小不超过 999。
3.输出描述
要求程序输出 n行,就是罗马数字对应的十进制数据。
输入输出样例
输入
3
LXXX
XCIII
DCCII
输出
80
93
702
代码
罗马数字,如果小的在大的左边,转为十进制的数时,就需要使用大-小,(-小+大)
反之一直相加即可。
LXXX —> 50+10+10+10=83 (L>X)
XC —> (-10)+100=90 (X<C)
在遍历判断时,因为是前一个和后一个进行比较,就需要考虑到遍历到最后一个的越界问题
import java.util.Scanner;
import java.util.HashMap;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int number = scan.nextInt();
int l=0;
//哈希,放入标准
HashMap<Character, Integer> map = new HashMap<>();
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[] ans = new int[number];
while(l<number){
int sum = 0;
String input = scan.next();
for(int i=0;i<input.length();++i){
int value = map.get(input.charAt(i));
// i<input.length()-1判断是否到字符串的最后一位
// value<map.get(input.charAt(i+1)) 判断前一位是否小于后一位
if(i<input.length()-1 && value<map.get(input.charAt(i+1))){
sum-=value;
}else{
sum+=value;
}
}
ans[l]=sum;
l++;
}
for(int j=0;j<ans.length;j++){
System.out.println(ans[j]);
}
scan.close();
}
}
总结
API | 说明 |
---|---|
map.put( ,); | 将键/值对添加到 hashMap 中 |
map.get() | 获取指定 key 对应对 value |