一 , Roman to Integer(罗马数字转换成整数)
1,问题描述:
给定一个罗马数字,要求转成成整数(该整数的范围为[1~3999]
2, 罗马数字的描述:
第一,罗马数字最基本的有五个: I, II , III, IV , V分别代表数字1,2,3,4,5
第二,还有七个基本罗马字符:
I: 1
V: 5
X: 10
L: 50
C: 100
D: 500
M: 1000
3,有一些罗马规则如下:
第一,相同的数字连写时,所表示的数=这些数字相加得到的数, 如: III=3;
第二,小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如: VIII=8;
第三, 小的数字,(只限于I, X和C这三个)在大的数字的左边,所表示的数=大数减去小数得到的数, 如: IV=4; IX=9;
第四, 正常使用时,连写的数字重复不得超过三次。
例如: CXXIII=100+10+10+1+1+1=123。
4, 例如 XLVII=47, III=3
MMMCCLXXIV=3274
二,AC了的程序, 用Java写成的。
import java.util.*;
public class Test2 { //leetcode 13
public static int romanToInt(String s) {
int result=0;
int i=0;
boolean flag;
String str1="";
int []data={1,4,5,9,10,40,50,90,100,400,500,900,1000};//什么是这些数,因为每个字符不能超过三个,因此,当数字为4是,则需要用5减去1,不能用4个1表示
String []str={"I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"};//一共有十三个数,其余数字可以用这十三个数组成
while(i<s.length())
{
if(i+1<s.length())
{
str1 = s.substring(i, i + 2); //由于罗马数字要么两个字符代表一个整数,要么一个字符代表一个整数,因此要考虑这两种情况
}
else
{
str1="";
}
String str2=String.valueOf(s.charAt(i));//这个考虑一个字符代表一个整数
flag=true;
for(int j=0;j<str.length;j++) {
if (str1.equals(str[j])) { //当两个字符代表的一个整数和给定的字符数组里的元素相匹配时,则把对应位置i的整数数组元素data[i]加上
result = result + data[j];
i = i + 2; //加上后,则下标移动两位
flag = false;
break;
}
}
if(flag==true) {//当一个字符代表的一个整数和给定的字符数组里的元素相匹配时,则把对应下标的i整数数组元素data[i]加上
for (int j = 0; j < str.length; j++) {
if (str2.equals(str[j])) {
result = result + data[j];
i++; //加上后,则下标移动一位
break;
}
}
}
}
return result; //把最终的结果返回。
}
public static void main(String []args)
{
Scanner scan=new Scanner(System.in);
String str;
int data;
str=scan.nextLine();
data=romanToInt(str);
System.out.println("罗马数字转化为整数: "+data);
}
}
运行结果图:
三,总结
这题,主要从两个字符代表一个整数,或者一个字符代表一个整数,从字符串左遍历到右边。就可以得到最终的整数。

本文详细介绍了如何将罗马数字转换为整数的方法,并提供了一段使用Java编写的示例代码。文中阐述了罗马数字的基本构成及转换规则,通过实例演示了算法的具体实现过程。
7万+





