이 기사는 고전적인 로마 숫자와 아랍어 숫자의 상호 변환에 대한 Java 구현 솔루션에 대해 설명합니다. 다음과 같이 참조에 대해 공유하십시오.
고대 로마 제국은 화려한 인간 문명을 창출했지만, 그들의 숫자 표현은 실제로 다수를 나타낼 때 약간 번거 롭습니다. 이제는 참을 수없는 것처럼 보이므로 현대에는 거의 사용되지 않습니다. 그 이유는 표현을 발명 한 사람의 지능 때문이 아니라 종교 때문에 0의 개념은 그 당시 숫자에서 금지되었습니다!
로마 숫자의 표현은 주로 다음 기본 기호에 따라 다릅니다.
I 1
v 5
x 10
l 50
C 100
D 500
M 1000
여기서는 1000 년 이내에 숫자의 표현 만 소개합니다.
단일 심볼이 반복되는 횟수는 횟수를 나타냅니다. 최대 3 번 반복하십시오. 예를 들어 CCC는 300, xx 평균 20이지만 150은 LLL으로 표시되지 않으며이 규칙은 IXCM에만 적용됩니다.
인접한 레벨의 큰 단위가 오른쪽에 있고 작은 장치가 왼쪽에있는 경우, 작은 장치가 큰 장치에서 공제되어 있음을 의미합니다. 예를 들어, IX 평균 9, IV 평균 4, XL은 40을 의미합니다. 더 많은 예는 아래 표를 참조하십시오. 규칙을 찾았습니까?
I, 1
II, 2
III, 3
IV, 4
v, 5
VI, 6
VII, 7
VIII, 8
ix, 9
x, 10
XI, 11
xii, 12
XIII, 13
XIV, 14
XV, 15
XVI, 16
XVII, 17
XVIII, 18
XIX, 19
xx, 20
XXI, 21
xxii, 22
xxix, 29
xxx, 30
XXXIV, 34
XXXV, 35
xxxix, 39
XL, 40
L, 50
Li, 51
LV, 55
LX, 60
LXV, 65
lxxx, 80
XC, 90
XCIII, 93
XCV, 95
XCVIII, 98
Xcix, 99
C, 100
CC, 200
CCC, 300
CD, 400
D, 500
DC, 600
DCC, 700
DCCC, 800
CM, 900
CMXCIX, 999
이 질문의 요구 사항은 다음과 같습니다. 프로그램을 작성하고 사용자는 여러 문자열의 로마 숫자를 입력하고 프로그램은 해당 소수점 표현을 출력합니다.
입력 형식은 다음과 같습니다. 첫 번째 줄은 정수 N이며, 이는 n 로마 숫자가 있음을 나타냅니다 (n <100). 나중에 각 라인마다 로마 숫자가 있습니다. 로마 숫자의 크기는 999를 초과하지 않아야합니다.
이 프로그램은 로마 숫자에 해당하는 소수점 데이터 인 N 라인을 출력해야합니다.
예를 들어, 사용자 입력 :
3
lxxx
XCIII
DCCII
그런 다음 프로그램이 출력해야합니다.
80
93
702
java.util.scanner;/*** 프로그램을 작성하고, 사용자는 여러 로마 숫자 문자열을 입력하고 프로그램은 해당 소수점 표현을 출력합니다. * * 입력 형식은 다음과 같습니다. 첫 번째 줄은 정수 N이며, 이는 n 로마 숫자가 있음을 나타냅니다 (n <100). 나중에 각 라인마다 로마 숫자가 있습니다. 로마 숫자의 크기는 999를 초과하지 않아야합니다. * * 프로그램은 로마 숫자에 해당하는 10 진수 데이터 인 N 라인을 출력해야합니다. 예를 들어, 사용자 입력 : 3 LXXX XCIII DCCII * * 그러면 프로그램이 출력해야합니다. 스캐너 mscanner = 새로운 스캐너 (System.In); System.out.println (r2a (mscanner.nextline ()); System.out.println (a2r (mscanner.nextint ()); } / ** * 로마 숫자를 아랍어 숫자로 변환 * @param m * @return * / public static int r2a (문자열 m) {int 그래프 [] = new int [400]; 그래프 [ 'i'] = 1; 그래프 [ 'v'] = 5; 그래프 [ 'x'] = 10; 그래프 [ 'l'] = 50; 그래프 [ 'c'] = 100; 그래프 [ 'd'] = 500; 그래프 [ 'm'] = 1000; char [] num = m.tochararray (); int sum = 그래프 [num [0]]; for (int i = 0; i <num.length -1; i ++) {if (그래프 [num [i]]> = 그래프 [num [i +1]]) {sum += 그래프 [num [i +1]]; } else {sum = sum + 그래프 [num [i + 1]] -2 * 그래프 [num [i]]; }} 반환 합계; } / ** * 아랍어 숫자를 로마 숫자로 변환 * @param 번호 * @return * / public static string a2r (int number) {String rnumber = ""; int [] aarray = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; 문자열 [] rarray = { "m", "cm", "d", "cd", "c", "xc", "l", "xl", "x", "x", "ix", "v", "iv", "i"}; if (번호 <1 || 숫자> 3999) {rnumber = "-1"; } else {for (int i = 0; i <aarray.length; i ++) {while (number> = aarray [i]) {rnumber+= rarray [i]; 번호 -= Aarray [i]; }} return rnumber; }}실행 결과 :
Java 알고리즘에 대한 자세한 내용은이 사이트에 관심이있는 독자들이 주제를 볼 수 있습니다. "Java 데이터 구조 및 알고리즘 자습서", "Java Operation Dom Node Tips 요약", "Java 파일 및 디렉토리 작동 팁 요약"및 "Java Cache Operation Tips의 요약"을 볼 수 있습니다.
이 기사가 모든 사람의 Java 프로그래밍에 도움이되기를 바랍니다.