首页 > 编程知识 正文

中文数字转化阿拉伯java,java将阿拉伯数字转换为中文数字

时间:2023-05-03 23:32:01 阅读:242455 作者:1903

Java实现罗马数字转换为阿拉伯数字 个人原创,谢谢支持逻辑规则实现代码

个人原创,谢谢支持

代码个人编写,实测有效,欢迎转载本文链接。https://blog.csdn.net/u014730287/article/details/103399779

逻辑规则

给定一个罗马数字s,( I<=s<=MMMCMXCIX)(即1到3999),将罗马数字转换成整数。

如罗马数字I,II,III,IV,V分别代表数字1, 2, 3, 4, 5。

格式:第一行输入一个罗马数字,接下来输出对应的整数。

提示: 首先要来了解一下罗马数字表示法,基本字符有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、正常使用时,连写的数字重复不得超过三次。

实现代码 import com.sun.istack.internal.NotNull;import java.util.Arrays;import java.util.List;/** * 罗马数字转换为阿拉伯数字 * @author fkptxmz */public class RomaTransitionNum { /** * 罗马列表 */ private final static List<String> ROMA_LIST = Arrays.asList("M","D","C","L","X","V","I"); /** * 罗马数字对应阿拉伯数字列表 */ private final static List<Integer> NUM_LIST = Arrays.asList(1000,500,100,50,10,5,1); /** * 前一个罗马数字 */ private String preRoma; /** *当前罗马数字 */ private String curRoma; /** *阿拉伯数字总和 */ private int countNum; /** *当前阿拉伯数字总和 */ private int curNum; /** * 初始化全局参数 */ private void init(){ this.preRoma = ""; this.curRoma = ""; this.countNum = 0; this.curNum = 0; } /** * 执行方法入口 * @param romaStr 罗马字符串 * @return int 返回转换完成的阿拉伯数字 */ public int romaToNum(String romaStr){ if(StringUtils.isNotEmpty(romaStr)){ init(); for (int i = 0; i < romaStr.length(); i++) { execute(String.valueOf(romaStr.charAt(i))); } // 处理最后的一段相同的罗马字母,否则会丢失 countNum += curNum; } return countNum; }//启动方法 public static void main(String[] args) {//3999 String romaString = "MMMCMXCIX"; System.out.println(new RomaTransitionNum().romaToNum(romaString)); } /** * 执行方法,核心代码 * @param roma 罗马字母 */ private void execute(String roma){ if(StringUtils.isNotEmpty(roma)){ curRoma = roma; if(StringUtils.isEmpty(preRoma) || curRoma.equals(preRoma)){ // 如果当前字符已前一个字符相同,或者前一个字符为空(代表当前为第一个字符),则当前数字相加 curNum += getCurRomaNum(curRoma); }else{ //当前字符与前一个字符不相同,则需要比较分位计算 if(ROMA_LIST.indexOf(curRoma) > ROMA_LIST.indexOf(preRoma)){ //当前字符位数小于前一个字符位数,则直接相加, countNum += curNum; //并重置当前数字为当前字符代表数字 curNum = getCurRomaNum(curRoma); }else{ //否则,进行相减操作, curNum = getCurRomaNum(curRoma) - curNum; //之后再计算和, countNum += curNum; //最后将当前数字置空 curNum = 0; } } preRoma = curRoma; } } /** * 获取当前罗马数字对应的阿拉伯数字 * @param roma 罗马数字 * @return int 阿拉伯数字 */ private int getCurRomaNum(@NotNull String roma){ return NUM_LIST.get(ROMA_LIST.indexOf(roma)); }}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。