网站建设公司长沙,相亲网站绑定微信怎么做,企业网站怎么做html,全国建设管理信息网站古罗马帝国开创了辉煌的人类文明#xff0c;但他们的数字表示法的确有些繁琐#xff0c;尤其在表示大数的时候#xff0c;现在看起来简直不能忍受#xff0c;所以在现代很少使用了。之所以这样#xff0c;不是因为发明表示法的人的智力的问题#xff0c;而是因为一个宗教… 古罗马帝国开创了辉煌的人类文明但他们的数字表示法的确有些繁琐尤其在表示大数的时候现在看起来简直不能忍受所以在现代很少使用了。之所以这样不是因为发明表示法的人的智力的问题而是因为一个宗教的原因当时的宗教禁止在数字中出现0的概念 罗马数字的表示主要依赖以下几个基本符号 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 这里我们只介绍一下1000以内的数字的表示法。 单个符号重复多少次就表示多少倍。最多重复3次。比如CCC表示300 XX表示20但150并不用LLL表示这个规则仅适用于I X C M。 如果相邻级别的大单位在右小单位在左表示大单位中扣除小单位。比如IX表示9 IV表示4 XL表示40 49 XLIX 更多的示例参见下表你找到规律了吗 I,1 II2III3IV4V5VI6VII7VIII8IX9 X10XI11XII12XIII,13XIV,14XV,15XVI,16XVII,17XVIII,18XIX,19XX,20XXI,21XXII,22XXIX,29XXX,30XXXIV,34XXXV,35XXXIX,39XL,40L,50LI,51LV,55LX,60LXV,65LXXX,80XC,90XCIII,93XCV,95XCVIII,98XCIX,99C,100CC,200CCC,300CD,400D,500DC,600DCC,700DCCC,800CM,900CMXCIX,999 本题目的要求是请编写程序由用户输入若干个罗马数字串程序输出对应的十进制表示。 输入格式是第一行是整数n,表示接下来有n个罗马数字(n100)。以后每行一个罗马数字。罗马数字大小不超过999。 要求程序输出n行就是罗马数字对应的十进制数据。 例如用户输入3LXXXXCIIIDCCII 则程序应该输出8093702 /*
方法一
*/
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();String[] a new String[n];for (int i 0; i n; i)a[i] sc.next();sc.close();for (int i 0; i n; i)System.out.println(check(a[i]));}static int check(String s) {char[] chars s.toCharArray();int N 0;for (int i 0; i chars.length;) {int t 0;if (i chars.length - 1) {t f(chars[i]);i;}if (i 1 chars.length)if (isIXCM(chars[i])) {int count 1;int j i1;while (j chars.length chars[i] chars[j] count 3) {count;j;}if (count 1) {t f(chars[i]) * count;i count;} else if (count 1) {if (f(chars[i]) f(chars[i 1])) {t f(chars[i 1]) - f(chars[i]);i 2;} else if (f(chars[i]) f(chars[i 1])) {t f(chars[i]);i;}}} else {if (f(chars[i]) f(chars[i 1])) {t f(chars[i 1]) - f(chars[i]);i 2;} else if (f(chars[i]) f(chars[i 1])) {t f(chars[i]);i;}}N t;}return N;}static boolean isIXCM(char c) {return c I || c X || c C || c M;}static int f(char c) {int n 0;switch (c) {case I:n 1;break;case V:n 5;break;case X:n 10;break;case L:n 50;break;case C:n 100;break;case D:n 500;break;case M:n 1000;break;}return n;}} /*
方法二建立一个表每两个字符匹配
*/import java.util.Scanner;public class Test2 {static int[][] table;static int M 7, N 7;public static void main(String[] args) {createTable();Scanner sc new Scanner(System.in);int n sc.nextInt();String[] a new String[n];for (int i 0; i n; i)a[i] sc.next();sc.close();createTable();for (int i 0; i n; i)System.out.println(check(a[i]));}static int check(String s) {char[] chars s.toCharArray();int T 0;int i 0;while (i 1 chars.length) {T table[charToIndex(chars[i])][charToIndex(chars[i 1])];i 2;}if (i chars.length - 1)T charToInt(chars[i]);return T;}static void createTable() {table new int[M][N];for (int i 0; i M; i) {for (int j 0; j N; j) {table[i][j] f3(i, j);}}}static int f3(int i, int j) {int t1 charToInt(indexToChar(i)), t2 charToInt(indexToChar(j));if (t2 t1) {return t2 - t1;}return t1 t2;}static int charToInt(char c) {int n 0;switch (c) {case I: n 1;break;case V: n 5;break;case X: n 10;break;case L: n 50;break;case C: n 100;break;case D: n 500;break;case M: n 1000;break;}return n;}static char indexToChar(int i){switch (i){case 0:return I;case 1:return V;case 2:return X;case 3:return L;case 4:return C;case 5:return D;}return M;}static int charToIndex(char c){switch (c){case I:return 0;case V:return 1;case X:return 2;case L:return 3;case C:return 4;case D:return 5;}return 6;}
} 转载于:https://www.cnblogs.com/Alpharun/p/8676202.html