13 Roman to Integer(罗马数字转换成整数)

Given a roman numeral, convert it to an integer.Input is guaranteed to be within the range from 1 to 3999.

Hide Tags: Math, String

解题思路:

首先要来了解一下罗马数字表示法,基本字符有7个:I,V,X,L,C,D,M,分别表示1,5,10,50,100,500,1000。在构成数字的时候,有下列规则:1、相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ= 3;2、小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ= 8;Ⅻ= 12;3、小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ=4;Ⅸ=9;4、正常使用时,,连写的数字重复不得超过三次。样例输入CXXIII样例输出:123如果你了解了规则的话,很容易可以看出来,只需要比较前后元素的大小,如果前面比后面大或是相等,这两个罗马字母代表的数字就相加;如果前面比后面小,就后面的减去前面的;

代码如下:

public static int romanToInt(String s){int size=s.length();int i=0;int b[]=new int[size];//将阿拉伯数字转换成对应的数字,存放到数组中while (i<size){switch (s.charAt(i)){case 'I':b[i]=1;break;case 'V':b[i]=5;break;case 'X':b[i]=10;break;case 'L':b[i]=50;break;case 'C':b[i]=100;break;case 'D':b[i]=500;break;case 'M':b[i]=1000;break;}i++;}/**求和计算 * 规律:如果前面的数子大于或等于后面的数组,直接相加,然后进行求和运算 * 如果前面的数字小于后面的数组,先做减运算,然后进行求和运算 * 注意:sum+=b[j]-2*b[j-1] 减去2倍的原因:在遍历的时候,两个大数中间夹 * 个小数,会有重叠的部分。 * 如: 1000 100 1000 :其中1000 100 直接求和,但100 1000时,需要把之前加进来的 * 100减去,因此出现减去2*100*/int sum=b[0];for (int j = 1; j < size; j++){if (b[j-1]<b[j]){sum+=b[j]-2*b[j-1];}else{sum+=b[j];}}return sum;}

梦想让我与众不同,奋斗让我改变命运!

13 Roman to Integer(罗马数字转换成整数)

相关文章:

你感兴趣的文章:

标签云: