罗马数字转换为十进制数字

来源:互联网 发布:电脑能写小说的软件 编辑:程序博客网 时间:2024/05/19 02:24
<pre name="code" class="html">给定一个罗马数字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、正常使用时,连写的数字重复不得超过三次。样例1输入:CXXIII输出:123
package rome_to_decimal_1;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.Scanner;public class Main {public static int reap_main_right = 0;public static int reap_main_left = 0;public static void main(String[] args) {int sum = 0;int sum_right = 0;int sum_left = 0;String string_right = "";String string_left = "";ArrayList<String>  list = new ArrayList<String>();        ArrayList<Integer> listNum = new ArrayList<Integer>();Scanner input = new Scanner(System.in);    String string = input.nextLine();///String string = "CXXIII";int len = string.length();while(len>=1){if(len==1){string_right=string.substring(0, 1);///System.out.println(string_right);list.add(String.valueOf(multi(string_right)));break; ////   while   for  里面均可以有break语句;}else{String  subString=string.substring(0, len);reap_main_right = repeat(subString);len=len-reap_main_right;string_right = string.substring(subString.length() - reap_main_right,subString.length());///System.out.println(string_right);list.add(String.valueOf(multi(string_right)));}}///while///System.out.println("---------------");for(int i=list.size()-1;i>=0;i--){listNum.add(Integer.valueOf(list.get(i)));}//Iterator it = listNum.iterator();//while(it.hasNext()){//System.out.println(it.next());//}for(int j=list.size()-1;j>=1;j--){    if(listNum.get(j)>listNum.get(j-1)){    listNum.set(j-1, listNum.get(j)-listNum.get(j-1));    listNum.remove(j);    }else{    listNum.set(j-1, listNum.get(j-1)+listNum.get(j));    listNum.remove(j);    }}System.out.println(listNum.get(0));}// /main// ///从后往前运算,统计出现的重复字母数public static int repeat(String str) {// int i = str.length() - 1;int reap_reap = 1;char endChar = str.charAt(str.length() - 1);for (int i = str.length() - 2; i >= 0; i--) {if (str.charAt(i) == endChar) {reap_reap++;} else {break;}}return reap_reap;}////repeat// ////连续位数的和是多少public static int multi(String str) {if (str.contains("I")) {return 1 * str.length();} else if (str.contains("X")) {return 10 * str.length();} else if (str.contains("L")) {return 50 * str.length();} else if (str.contains("C")) {return 100 * str.length();} else if (str.contains("D")) {return 500 * str.length();} else if (str.contains("M")) {return 1000 * str.length();}return 0;}////multi}
MMMCMXCIX
3999
0 0
原创粉丝点击