13
将罗⻢数字转换成阿拉伯数字,首先罗马数字都会按照规则书写,并且 IV =4 VI=6 这种写法可以让我们推断出
当一个较小数在较大数面前时,表示较大数减去较小数
当一个较小数在较大数后面时,则表示两者相加,也就是说,后者永远为正。
同时也要建立一个switch匹配,来转换罗马数字和阿拉伯数字。
所以我们先将一个罗马数字的字符串先取出第0位作为prenum,同时与下一位两两比较,得出prenum的正负,再将原先的num赋值给prenum,并继续比较下去。在得出结果sum时,还要加入最后的num(被赋值到了prenum)
public class day04 {
public int romansToSum (String strs){
int sum =0 ; // 初始化结果
int prenum=pipei(strs.charAt(0)); //取第一个罗马数字进行比较
for ( int i = 1 ; i < strs.length() ; i++) {
int num = pipei(strs.charAt(i));
if ( prenum < num ) { sum=sum-prenum;} //较小数则变成负数
else
{ sum = sum+prenum;} //如果是较大数则为正数
prenum = num ; //将num赋值给prenum,开始下一轮比较
}
sum = sum+prenum ; //此时的prenum为最后一位的num
return sum ;
}
public int pipei (char ch){ //定义一个罗马数字与阿拉伯数字的转换
switch (ch){
case 'I' : return 1 ;
case 'V' : return 5 ;
case 'X' : return 10 ;
case 'L' : return 50 ;
case 'C' : return 100 ;
case 'D' : return 500 ;
case 'M' : return 1000 ;
default: return 0 ;
}
}
}